hysteria-orm 10.4.1 → 10.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cli.cjs DELETED
@@ -1,373 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';var commander=require('commander'),de=require('fs'),Be=require('path'),Ia=require('fs/promises'),sqlHighlight=require('sql-highlight'),module$1=require('module'),url=require('url'),Ne=require('crypto'),sqlFormatter=require('sql-formatter'),ve=require('dayjs'),Np=require('dayjs/plugin/customParseFormat.js'),wp=require('dayjs/plugin/timezone.js'),qp=require('dayjs/plugin/utc.js'),Ip=require('pluralize'),stream=require('stream'),child_process=require('child_process'),uf=require('readline');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var de__default=/*#__PURE__*/_interopDefault(de);var Be__default=/*#__PURE__*/_interopDefault(Be);var Ia__default=/*#__PURE__*/_interopDefault(Ia);var Ne__default=/*#__PURE__*/_interopDefault(Ne);var ve__default=/*#__PURE__*/_interopDefault(ve);var Np__default=/*#__PURE__*/_interopDefault(Np);var wp__default=/*#__PURE__*/_interopDefault(wp);var qp__default=/*#__PURE__*/_interopDefault(qp);var Ip__default=/*#__PURE__*/_interopDefault(Ip);var uf__default=/*#__PURE__*/_interopDefault(uf);var Aa=i=>{throw TypeError(i)};var xa=(i,t,e)=>t.has(i)||Aa("Cannot "+e);var $e=(i,t,e)=>(xa(i,t,"read from private field"),e?e.call(i):t.get(i)),Pa=(i,t,e)=>t.has(i)?Aa("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e),$r=(i,t,e,r)=>(xa(i,t,"write to private field"),t.set(i,e),e);var T=class extends Error{constructor(t,e,r){super(t+" - "+e),this.code=e,this.caller=t,this.error=r;}};var z=class{constructor(t){this.options=t;}static async createDriver(t){throw new T("Driver::createDriver This error should never happen. Please report it to the developers.","DEVELOPMENT_ERROR")}};var Q=class extends Error{constructor(t){super(""),this.message=`Driver '${t}' not found, it's likely not installed, try running 'npm install ${t}'`;}};var Ze=class Ze extends z{constructor(e,r){super(r);this.type="mongo";this.client=e;}static async createDriver(){if(this.mongoClient)return new Ze(this.mongoClient);let e=await import('mongodb').catch(()=>{throw new Q("mongodb")});if(this.mongoClient=e.default??e,!this.mongoClient)throw new Q("mongodb");return new Ze(this.mongoClient)}};Ze.mongoClient=null;var wt=Ze;var Xe=class Xe extends z{constructor(e,r){super(r);this.type="mssql";this.client=e;}static async createDriver(){if(this.mssqlClient)return new Xe(this.mssqlClient);let e=await import('mssql').catch(()=>{throw new Q("mssql")});if(this.mssqlClient=e.default??e,!this.mssqlClient)throw new Q("mssql");return new Xe(this.mssqlClient)}};Xe.mssqlClient=null;var qt=Xe;var et=class et extends z{constructor(e,r){super(r);this.type="mysql";this.client=e;}static async createDriver(){if(this.mysqlClient)return new et(this.mysqlClient);let e=await import('mysql2/promise').catch(()=>{throw new Q("mysql2")});if(this.mysqlClient=e.default??e,!this.mysqlClient)throw new Q("mysql2");return new et(this.mysqlClient)}};et.mysqlClient=null;var St=et;var tt=class tt extends z{constructor(e,r){super(r);this.type="oracledb";this.client=e;}static async createDriver(){if(this.oracledbClient)return new tt(this.oracledbClient);let e=await import('oracledb').catch(()=>{throw new Q("oracledb")});if(this.oracledbClient=e.default??e,!this.oracledbClient)throw new Q("oracledb");return new tt(this.oracledbClient)}};tt.oracledbClient=null;var Mt=tt;var rt=class rt extends z{constructor(e,r){super(r);this.type="postgres";this.client=e;}static async createDriver(){if(this.pgClient)return new rt(this.pgClient);let e=await import('pg').catch(()=>{throw new Q("pg")});if(this.pgClient=e.default??e,!this.pgClient)throw new Q("pg");return new rt(this.pgClient)}};rt.pgClient=null;var _t=rt;var ot=class ot extends z{constructor(e,r){super(r);this.type="sqlite";this.client=e;}static async createDriver(){if(this.sqlite3Client)return new ot(this.sqlite3Client);let e=await import('sqlite3').catch(()=>{throw new Q("sqlite3")});if(this.sqlite3Client=e.default??e,!this.sqlite3Client)throw new Q("sqlite3");return new ot(this.sqlite3Client)}};ot.sqlite3Client=null;var Ct=ot;var me=class{static async getDriver(t){let e=this.getExistingDriver(t);if(e)return e;switch(t){case "mysql":case "mariadb":return this.mysqlDriver=await St.createDriver(),this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver=await _t.createDriver(),this.pgDriver;case "sqlite":return this.sqliteDriver=await Ct.createDriver(),this.sqliteDriver;case "mongo":return this.mongodbDriver=await wt.createDriver(),this.mongodbDriver;case "mssql":return this.mssqlDriver=await qt.createDriver(),this.mssqlDriver;case "oracledb":return this.oracledbDriver=await Mt.createDriver(),this.oracledbDriver;default:throw new T(`DriverFactory::getDriver Driver ${t} not supported`,"DRIVER_NOT_FOUND")}}static getExistingDriver(t){switch(t){case "mysql":case "mariadb":return this.mysqlDriver;case "postgres":case "cockroachdb":return this.pgDriver;case "sqlite":return this.sqliteDriver;case "mongo":return this.mongodbDriver;case "mssql":return this.mssqlDriver;case "oracledb":return this.oracledbDriver;default:return null}}};me.mysqlDriver=null,me.pgDriver=null,me.sqliteDriver=null,me.mssqlDriver=null,me.oracledbDriver=null,me.mongodbDriver=null;var P={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},Gc=()=>{try{de__default.default.readFileSync(".env","utf8").split(`
3
- `).forEach(e=>{let[r,o]=e.split("="),n=r.trim(),s=o.trim();switch(n){case "DB_TYPE":P.DB_TYPE||(P.DB_TYPE=s);break;case "DB_HOST":P.DB_HOST||(P.DB_HOST=s);break;case "DB_PORT":P.DB_PORT||(P.DB_PORT=s);break;case "DB_USER":P.DB_USER||(P.DB_USER=s);break;case "DB_PASSWORD":P.DB_PASSWORD||(P.DB_PASSWORD=s);break;case "DB_DATABASE":P.DB_DATABASE||(P.DB_DATABASE=s);break;case "MIGRATION_PATH":P.MIGRATION_PATH||(P.MIGRATION_PATH=s||"database/migrations");break;case "REDIS_HOST":P.REDIS_HOST||(P.REDIS_HOST=s);break;case "REDIS_PORT":P.REDIS_PORT||(P.REDIS_PORT=s);break;case "REDIS_USERNAME":P.REDIS_USERNAME||(P.REDIS_USERNAME=s);break;case "REDIS_PASSWORD":P.REDIS_PASSWORD||(P.REDIS_PASSWORD=s);break;case "REDIS_DATABASE":P.REDIS_DATABASE||(P.REDIS_DATABASE=s);break;case "MONGO_URL":P.MONGO_URL||(P.MONGO_URL=s);break;case "MSSQL_TRUST_SERVER_CERTIFICATE":P.MSSQL_TRUST_SERVER_CERTIFICATE||(P.MSSQL_TRUST_SERVER_CERTIFICATE=s==="true");break}});}catch{}finally{return P}},R=Gc();var zc=async i=>(await me.getDriver(i)).client,Oe=async(i,t)=>{let e=await zc(i);switch(i){case "mariadb":case "mysql":let r=t;return e.createPool({host:r.host,port:r.port,user:r.username,password:r.password,database:r.database,...r?.driverOptions});case "postgres":case "cockroachdb":let s=t,a=e;return new a.Pool({host:s.host,port:s.port,user:s.username,password:s.password,database:s.database,...s?.driverOptions});case "sqlite":let d=e,m=t,u=m?.database;return new d.Database(u,m?.driverOptions?.mode??void 0,A=>{if(A)throw new T("SqliteDataSource::createSqlPool","CONNECTION_NOT_ESTABLISHED")});case "mssql":let p=e,y=t,{options:h,...N}=y.driverOptions??{};return await p.connect({server:y.host??"localhost",port:y.port,database:y.database,user:y.username,password:y.password,...N,options:{trustServerCertificate:R.MSSQL_TRUST_SERVER_CERTIFICATE??void 0,...h,abortTransactionOnError:false,enableImplicitTransactions:false}});case "oracledb":let $=e,V=t,C=`${V.host}/${V.database}`;return await $.createPool({user:V.username,password:V.password,connectString:C,...V.driverOptions});default:throw new T("SqlConnectionUtils::createSqlPool",`UNSUPPORTED_DATABASE_TYPE_${i}`)}};var Le={info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",reset:"\x1B[0m"};function Xc(){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 Or(i,t){let e=Xc(),r=i.toUpperCase();return i==="error"?`${Le.error}[${r}] ${e}
4
- ${t}${Le.reset}
5
- `:i==="warn"?`${Le.warn}[${r}] ${e}
6
- ${t}${Le.reset}
7
- `:i==="info"?`${Le.info}[${r}] ${e}
8
- ${t}${Le.reset}
9
- `:`[${r}] ${e}
10
- ${t}
11
- `}var Ue=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);}};Ue.loggerInstance={info(t){console.log(Or("info",t));},error(t){console.error(Or("error",t));},warn(t){console.warn(Or("warn",t));}};function ep(i){return i.map(t=>typeof t=="object"?JSON.stringify(t):typeof t=="string"?`'${t}'`:typeof t=="number"?t:typeof t=="boolean"?t?"true":"false":t).join(", ")}function Z(i,t,e){if(!t)return;i=sqlHighlight.highlight(i,{colors:{keyword:"\x1B[34m",string:"\x1B[32m",number:"\x1B[33m",bracket:"\x1B[36m",clear:"\x1B[0m",comment:"\x1B[90m",function:"\x1B[35m",identifier:"\x1B[37m",special:"\x1B[31m"}});let r=`${i} [${ep(e||[])}]`;Ue.loggerInstance.info(r);}function Da(i,t,e=false){e&&Ue.loggerInstance[t](i);}var g=Ue;var vr=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
- FROM information_schema.tables
13
- WHERE table_catalog = '${e}'
14
- AND table_schema = 'public'
15
- AND table_type = 'BASE TABLE';`;case "mssql":return `SELECT TABLE_NAME
16
- FROM INFORMATION_SCHEMA.TABLES
17
- WHERE TABLE_CATALOG = '${e}'
18
- AND TABLE_TYPE = 'BASE TABLE';`;case "oracledb":return "SELECT TABLE_NAME FROM USER_TABLES";default:throw new Error(`Unsupported database type: ${t}`)}}dropAllTablesTemplate(t,e){if(!e.length)return "SELECT 1;";switch(t){case "mysql":case "mariadb":case "cockroachdb":case "postgres":return `DROP TABLE IF EXISTS ${e.join(", ")} CASCADE;`;case "mssql":return e.map(r=>`DROP TABLE IF EXISTS [${r}];`).join(`
19
- `);case "oracledb":return e.map(r=>`DROP TABLE "${r}" CASCADE CONSTRAINTS PURGE`).join(`;
20
- `)+";";default:throw new Error(`Unsupported database type: ${t}`)}}basicMigrationTemplate(t=false){return t?`import { Migration } from 'hysteria-orm';
21
-
22
- export default class extends Migration {
23
- async up() {
24
- // Your migration logic here
25
- }
26
-
27
- async down() {
28
- // Your rollback logic here
29
- }
30
- }
31
- `:`import { Migration } from 'hysteria-orm';
32
-
33
- export default class extends Migration {
34
- async up(): Promise<void> {
35
- // Your migration logic here
36
- }
37
-
38
- async down(): Promise<void> {
39
- // Your rollback logic here
40
- }
41
- }
42
- `}createMigrationTemplate(t=false,e){return t?`import { Migration } from 'hysteria-orm';
43
-
44
- export default class extends Migration {
45
- async up() {
46
- this.schema.createTable(
47
- '${e}',
48
- (table) => {
49
- // Your create table logic here
50
- },
51
- );
52
- }
53
-
54
- async down() {
55
- // Your rollback logic here
56
- }
57
- }
58
- `:`import { Migration } from 'hysteria-orm';
59
-
60
- export default class extends Migration {
61
- async up(): Promise<void> {
62
- this.schema.createTable(
63
- '${e}',
64
- (table) => {
65
- // Your create table logic here
66
- },
67
- );
68
- }
69
-
70
- async down(): Promise<void> {
71
- // Your rollback logic here
72
- }
73
- }
74
- `}alterMigrationTemplate(t=false,e){return t?`import { Migration } from 'hysteria-orm';
75
-
76
- export default class extends Migration {
77
- async up() {
78
- this.schema.alterTable(
79
- '${e}',
80
- (table) => {
81
- // Your alter table logic here
82
- },
83
- );
84
- }
85
-
86
- async down() {
87
- // Your rollback logic here
88
- }
89
- }
90
- `:`import { Migration } from 'hysteria-orm';
91
-
92
- export default class extends Migration {
93
- async up(): Promise<void> {
94
- this.schema.alterTable(
95
- '${e}',
96
- (table) => {
97
- // Your alter table logic here
98
- },
99
- );
100
- }
101
-
102
- async down(): Promise<void> {
103
- // Your rollback logic here
104
- }
105
- }
106
- `}selectAllFromMigrationsTemplate(){return "SELECT * FROM migrations"}migrationTableTemplateMysql(){return "CREATE TABLE IF NOT EXISTS `migrations`(\n `id` INT NOT NULL AUTO_INCREMENT,\n `name` VARCHAR(255) NOT NULL,\n `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;\n"}migrationTableTemplatePg(){return `CREATE TABLE IF NOT EXISTS migrations (
107
- id SERIAL PRIMARY KEY,
108
- name VARCHAR(255) NOT NULL,
109
- timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
110
- );
111
- `}migrationTableTemplateSQLite(){return `CREATE TABLE IF NOT EXISTS migrations (
112
- id INTEGER PRIMARY KEY AUTOINCREMENT,
113
- name TEXT NOT NULL,
114
- timestamp TEXT NOT NULL DEFAULT '${new Date().toISOString()}'
115
- );`}migrationTableTemplateMssql(){return `IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='migrations' AND xtype='U')
116
- CREATE TABLE [migrations] (
117
- [id] INT NOT NULL IDENTITY(1,1),
118
- [name] NVARCHAR(255) NOT NULL,
119
- [timestamp] DATETIME NOT NULL DEFAULT GETDATE(),
120
- PRIMARY KEY ([id])
121
- );`}migrationTableTemplateOracle(){return `CREATE TABLE "migrations" (
122
- "id" NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
123
- "name" VARCHAR2(255) NOT NULL,
124
- "timestamp" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
125
- )`}},Y=new vr;async function Er(i,t=true,e){let r=i.getDbType(),o=i.database;r||(g.error("DB_TYPE is not set could not drop all tables"),process.exit(1)),o||(g.error("DB_DATABASE is not set could not drop all tables"),process.exit(1)),g.info("Dropping all tables for database type: "+r);let n=null,s=e&&r==="postgres";try{if(r==="sqlite"){await i.closeConnection(),await Ia__default.default.rm(o,{recursive:!0,force:!0}),g.info("Sqlite database dropped successfully"),await Ia__default.default.writeFile(o,""),g.info("Sqlite database recreated successfully");let u=i.getConnectionDetails();i.sqlPool=await Oe(i.getDbType(),u),g.info("All tables dropped successfully");return}let a=Y.getAllTablesTemplate(r,o),l=await i.rawQuery(a),d=Y.parseGetAllTables(r,o,l);if(!d.length){g.info("No tables to drop");return}let m=Y.dropAllTablesTemplate(r,d);if(s&&(n=await i.startTransaction(),i=n.sql),(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 0;"),r==="mssql"){let c=(await i.rawQuery(`
126
- SELECT
127
- OBJECT_NAME(parent_object_id) AS table_name,
128
- name AS constraint_name
129
- FROM sys.foreign_keys;
130
- `)).recordset;for(let p of c)await i.rawQuery(`ALTER TABLE [${p.table_name}] DROP CONSTRAINT [${p.constraint_name}];`);}if(r==="oracledb"){let u=await i.rawQuery(`
131
- SELECT constraint_name, table_name
132
- FROM user_constraints
133
- WHERE constraint_type = 'R'
134
- `);for(let c of u.rows||[])await i.rawQuery(`ALTER TABLE "${c.TABLE_NAME}" DROP CONSTRAINT "${c.CONSTRAINT_NAME}"`);for(let c of d)await i.rawQuery(`DROP TABLE "${c}" CASCADE CONSTRAINTS PURGE`);}else await i.rawQuery(m);(r==="mysql"||r==="mariadb")&&await i.rawQuery("SET FOREIGN_KEY_CHECKS = 1;"),s&&await n?.commit(),g.info("All tables dropped successfully");}catch(a){throw s&&await n?.rollback(),g.error(a),a}finally{t&&await i.closeConnection();}}var tp=()=>{let i=R.MIGRATION_PATH,t=Be__default.default.resolve(process.cwd(),i);return de__default.default.existsSync(t)||de__default.default.mkdirSync(t,{recursive:true}),t},Oa=(i,t=false,e="basic",r="table")=>{let o=tp(),n=new Date().getTime(),s=t?`${n}_${i}.js`:`${n}_${i}.ts`,a=Be__default.default.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}de__default.default.writeFileSync(a,l),g.info(`Migration created successfully at '${a}'.`),process.exit(0);};async function ne(i,t){let{bundleRequire:e}=await import('bundle-require').catch(()=>{throw new Q("bundle-require")}),r=Be__default.default.isAbsolute(i)?i:Be__default.default.resolve(process.cwd(),i),{mod:o}=await e({filepath:r,format:"esm",preserveTemporaryFile:false,esbuildOptions:{keepNames:true,sourcemap:true},tsconfig:t??"./tsconfig.json",external:["ioredis","mongodb","pg","mysql2","sqlite3","bundle-require","esbuild","sql-formatter","sql-highlight","dayjs","commander"]});return o}var sp=async(i,t)=>{if(i.endsWith(".ts"))return await import('typescript').catch(()=>{throw new T("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `typeScript` installed in your project. Please install it with `npm install typescript --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('esbuild').catch(()=>{throw new T("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `esbuild` installed in your project. Please install it with `npm install esbuild --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),await import('bundle-require').catch(()=>{throw new T("MigrationUtils::importMigrationFile In order to use TypeScript migrations, you must have `bundle-require` installed in your project. Please install it with `npm install bundle-require --save-dev`, if you're in a production environment, it's recommended to transpile your migrations to JavaScript before running the application.","MIGRATION_MODULE_NOT_FOUND")}),ne(i,t);try{return import(url.pathToFileURL(i).href)}catch{let o=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));try{let n=o(i);return {default:n.default||n,...n}}catch{throw new T(`MigrationUtils::importMigrationFile Failed to import migration file: ${i}. Both ESM and CommonJS imports failed.`,"MIGRATION_MODULE_NOT_FOUND")}}};async function Rt(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 Qa(Y.migrationTableTemplateSQLite(),[],t),await Qa(Y.selectAllFromMigrationsTemplate(),[],t)||[];case "mssql":let s=t;return await s.request().query(Y.migrationTableTemplateMssql()),(await s.request().query(Y.selectAllFromMigrationsTemplate())).recordset;case "oracledb":let d=await t.getConnection();try{try{await d.execute(Y.migrationTableTemplateOracle());}catch(u){if(u.errorNum!==955)throw u}return ((await d.execute('SELECT * FROM "migrations"')).rows||[]).map(u=>({id:u[0],name:u[1],timestamp:u[2]}))}finally{await d.close();}default:throw new T("MigrationUtils::getMigrationTable Unsupported database type","DEVELOPMENT_ERROR")}}async function At(i,t,e){let r=lp(t),o=[];for(let n of r){let s=await ap(n,t,e),a=new s(i||R.DB_TYPE);a.migrationName=n,o.push(a);}return o}async function ip(i,t){let e=await sp(i,t);if(!e.default)throw new T("MigrationUtils::loadMigrationModule Migration module does not have a default export","MIGRATION_MODULE_NOT_FOUND");return e.default}async function ap(i,t=R.MIGRATION_PATH||"database/migrations",e){t=Be.join(t,i);let r=Be__default.default.resolve(process.cwd(),t),o=await ip(r,e);if(!o)throw new T("MigrationUtils::findMigrationModule migrations module not found for migration: "+i,"MIGRATION_MODULE_NOT_FOUND");return o}function lp(i){let t=process.cwd(),e=Be__default.default.resolve(i||R.MIGRATION_PATH||"database/migrations"),r=Be__default.default.resolve(t,e);try{let o=de__default.default.readdirSync(r).filter(n=>{let s=Be__default.default.extname(n),a=Be__default.default.join(r,n);return de__default.default.statSync(a).isFile()&&(s===".ts"||s===".js")});if(o.length)return o;throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}catch{throw new T("MigrationUtils::findMigrationNames No database migration files found on path: "+r,"MIGRATION_MODULE_NOT_FOUND")}}async function Qa(i,t,e){return new Promise((r,o)=>{e.all(i,t,(n,s)=>{n&&o(n),r(s);});})}async function st(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Running migrations for database type: "+n);try{let l=await Rt(n,i.getPool()),m=(await At(n,e,r)).filter(c=>!l.map(p=>p.name).includes(c.migrationName));if(!m.length){g.info("No pending migrations.");return}if(t){let c=m.findIndex(h=>h.migrationName===t);if(c===-1){console.error(`Migration ${t} not found.`);return}let p=m.slice(0,c+1);s&&(a=await i.startTransaction(),i=a.sql),await new Re(i).upMigrations(p),s&&await a?.commit(),g.info("Migrations ran successfully");return}let u=new Re(i);s&&(a=await i.startTransaction(),i=a.sql),await u.upMigrations(m),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations ran successfully");}var xt={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 Ba=null;function ka(i,t,e){if(!t||typeof t!="object")return;let r=t;if(!r.filters)return;let o=e.getColumns();for(let[n,s]of Object.entries(r.filters)){let a=s.value;if(a==null||a==="")continue;let l=o.find(u=>u.columnName===n||u.databaseName===n);if(!l)continue;let d=typeof l.type=="string"?l.type:"string",m=xt[d]||"string";if(m==="string"||m==="textarea"){i.whereLike(n,`%${a}%`);continue}if(m==="boolean"){i.where(n,a==="true"||a===true);continue}if(m==="date"||m==="datetime"){if(typeof a=="object"&&a!==null){let u=a;u.from&&i.where(n,">=",u.from),u.to&&i.where(n,"<=",u.to);continue}i.where(n,a);continue}i.where(n,a);}}function it(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 dp(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseResource:t,BaseRecord:e,BaseProperty:r}=i;return class extends t{constructor(n){super(n),this._model=n,this._db=Ba;}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=xt[a]||"string";return new r({path:s.columnName,type:l,isId:s.isPrimary,isSortable:true})})}property(n){let a=this._model.getColumns().find(m=>m.columnName===n||m.databaseName===n);if(!a)return null;let l=typeof a.type=="string"?a.type:"string",d=xt[l]||"string";return new r({path:a.columnName,type:d,isId:a.isPrimary,isSortable:true})}async count(n){let s=this._model.query({connection:this._db});return ka(s,n,this._model),s.getCount()}async find(n,s={}){let a=this._model.query({connection:this._db});return ka(a,n,this._model),s.limit&&a.limit(s.limit),s.offset&&a.offset(s.offset),s.sort?.sortBy&&a.orderBy(s.sort.sortBy,s.sort.direction||"asc"),(await a.many()).map(d=>new e(it(d,this._model),this))}async findOne(n){if(!this._model.primaryKey)return null;let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});return a?new e(it(a,this._model),this):null}async findMany(n){let s=this._model.primaryKey;return s?(await this._model.query({connection:this._db}).whereIn(s,n).many()).map(l=>new e(it(l,this._model),this)):[]}async create(n){let s=await this._model.insert(n,{connection:this._db});return it(s,this._model)}async update(n,s){if(!this._model.primaryKey)throw new Error("Model has no primary key");let l=await this._model.findOneByPrimaryKey(n,{connection:this._db});if(!l)throw new Error("Record not found");let d=await this._model.updateRecord(l,s,{connection:this._db});return it(d,this._model)}async delete(n){if(!this._model.primaryKey)throw new Error("Model has no primary key");let a=await this._model.findOneByPrimaryKey(n,{connection:this._db});a&&await this._model.deleteRecord(a,{connection:this._db});}}}async function mp(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),{BaseDatabase:t}=i;return class extends t{static isAdapterFor(r){return false}resources(){return []}}}async function up(){let i=await import('adminjs').catch(()=>{throw new Q("adminjs")}),t=await dp(),e=await mp();i.default.registerAdapter({Database:e,Resource:t});}async function kr(i,t){Ba=i;let e=await import('adminjs').catch(()=>{throw new Q("adminjs")});await up();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 Ka(i,t){let{admin:e}=await kr(i,t),r;try{r=await import('@adminjs/express');}catch{throw new Q("@adminjs/express")}let o=r.buildRouter(e);return {admin:e,router:o}}var Fe=new Map,Pt=class{async get(t){return Fe.get(t)}async set(t,e,r){Fe.set(t,e),r&&setTimeout(()=>{Fe.delete(t);},r);}async invalidate(t){Fe.delete(t);}async invalidateAll(t){let e=Fe.keys();for(let r of e)r.startsWith(t)&&Fe.delete(r);}};var Dt=class{constructor(t){switch(this.type=t?.type||R.DB_TYPE,this.type){case "mongo":this.handleMongoSource(t);break;case "cockroachdb":this.handleCockroachdbSource(t);break;case "postgres":this.handlePostgresSource(t);break;case "mariadb":case "mysql":this.handleMysqlSource(t);break;case "sqlite":this.handleSqliteSource(t);break;case "mssql":this.handleMssqlSource(t);break;case "oracledb":this.handleOracleDBSource(t);break;default:throw new T(`Invalid database type: ${this.type}, please provide a valid database type in your input or in the .env file with the key DB_TYPE
135
- Valid database types are: [mongo, postgres, cockroachdb, mysql, mariadb, sqlite]`,`UNSUPPORTED_DATABASE_TYPE_${this.type}`)}}handleCockroachdbSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=26257);}handlePostgresSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=5432);}handleMysqlSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=3306);}handleSqliteSource(t){this.database=t?.database||R.DB_DATABASE||":memory:",this.logs=t?.logs||R.DB_LOGS||false;}handleMongoSource(t){this.url=t?.url||R.MONGO_URL,this.logs=t?.logs||R.MONGO_LOGS||false;}handleMssqlSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=1433);}handleOracleDBSource(t){this.host=t?.host||R.DB_HOST,this.port=+t?.port||+R.DB_PORT,this.username=t?.username||R.DB_USER,this.password=t?.password||R.DB_PASSWORD,this.database=t?.database||R.DB_DATABASE,this.logs=t?.logs||R.DB_LOGS||false,this.port||(this.port=1521);}};var cp=i=>{let{required:t,...e}=i.openApi||{},r={...e,type:i.openApi?.type||"string",description:i.openApi?.description??`Property: ${i.columnName}`};return i.openApi?.type?{...r,type:i.openApi.type}:Array.isArray(i.type)?{...r,type:"string",enum:i.type}:i.type==="date"||i.type==="datetime"||i.type==="timestamp"||i.type==="time"?{...r,type:"string",format:"date-time"}:i.type==="boolean"?{...r,type:"boolean"}:i.type==="integer"||i.type==="tinyint"||i.type==="smallint"||i.type==="mediumint"||i.type==="increment"?{...r,type:"integer",format:"int32"}:i.type==="biginteger"||i.type==="bigIncrement"?{...r,type:"integer",format:"int64"}:i.type==="float"||i.type==="real"?{...r,type:"number",format:"float"}:i.type==="double"?{...r,type:"number",format:"double"}:i.type==="decimal"||i.type==="numeric"?{...r,type:"number"}:i.type==="json"||i.type==="jsonb"?{...r,type:"object"}:i.type==="uuid"?{...r,type:"string",format:"uuid"}:i.type==="ulid"?{...r,type:"string",format:"ulid"}:i.type==="string"||i.type==="char"||i.type==="varchar"||i.type==="text"||i.type==="longtext"||i.type==="mediumtext"||i.type==="tinytext"?{...r,type:"string"}:i.type==="blob"||i.type==="binary"||i.type==="varbinary"||i.type==="tinyblob"||i.type==="mediumblob"||i.type==="longblob"?{...r,type:"string",format:"binary"}:i.type==="year"?{...r,type:"integer",format:"int32"}:r},pp=i=>i.openApi?.required??false,fp=i=>{let t=i.getColumns(),e={};for(let r of t)r.hidden||(e[r.columnName]=cp(r));return e},yp=i=>{let t=i.getColumns(),e=[];for(let r of t)pp(r)&&e.push(r.columnName);return e||[]},hp=i=>{let t=fp(i),e=yp(i);return {type:"object",properties:t,required:e.length?e:[]}};var La=i=>i.map(t=>({...hp(t),modelName:t.name,$id:t.name}));var Br=(i,t)=>{let e=Ne__default.default.createHash("sha256"),r=i;return e.update(r),e.digest("hex")};var Kr=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"}},It=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)},Fa=(i,t)=>{let e=i;for(let r=0;r<t.length&&e.includes("?");r++)e=e.replace(/\?/,It(t[r]));for(let r=0;r<t.length;r++){let o=new RegExp(`\\$${r+1}(?!\\d)`,"g");e=e.replace(o,It(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`\\@${r+1}(?!\\d)`,"g");e=e.replace(o,It(t[r]));}for(let r=0;r<t.length;r++){let o=new RegExp(`:${r+1}(?!\\d)`,"g");e=e.replace(o,It(t[r]));}return e},at=(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,$t=(i,t)=>{let e=i.getDbType(),r;try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions,language:Kr(e)});}catch{try{r=sqlFormatter.format(t,{...i.inputDetails.queryFormatOptions});}catch{r=t;}}return r};var Lr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add ${o}`,bindings:[]}}},Wa=new Lr;var Ur=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},ja=new Ur;var Fr=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`[${o}]`).join(", ")})`,bindings:[]}}},Va=new Fr;var Wr=class{toSql(t){let e=t,r=new b(this.model,"mssql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a="";e.options.nullable!==void 0&&(a=e.options.nullable?" null":" not null");let l=`alter column [${e.column}] ${s}${a}`;if(e.options.dropDefault&&(l=`drop constraint DF_${e.column}, ${l}`),e.options.default!==void 0&&!e.options.dropDefault){let d=e.options.default;d===null?d="null":typeof d=="string"&&(d==="NULL"?d="null":d==="TRUE"||d==="FALSE"?d=d==="TRUE"?"1":"0":d=`'${d}'`),l+=`, add constraint DF_${e.column} default ${d} for [${e.column}]`;}return e.options.unique!==void 0&&e.options.unique&&(l+=`, add constraint UQ_${e.column} unique ([${e.column}])`),{sql:l,bindings:[]}}},Ha=new Wr;var w=class{constructor(t,e=false){this.currParamIndex=1;this.isRawValue=false;this.keyword=t,this.isRawValue=e;}};var We=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 bp(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 Tp(i){return typeof i!="string"||!i?i:i.replace(/([-_][a-z])/g,t=>t.toUpperCase().replace("-","").replace("_",""))}function k(i,t){return t==="preserve"?i:t==="snake"?bp(i):t==="camel"?Tp(i):t instanceof RegExp?i.replace(t,e=>e[1].toUpperCase()):t(i)}ve__default.default.extend(qp__default.default);ve__default.default.extend(wp__default.default);ve__default.default.extend(Np__default.default);var Ot=(i,t="ISO",e="UTC")=>{if(!(i instanceof Date)||isNaN(i.getTime()))throw new Error("Invalid date provided");let r=ve__default.default(i);if(e==="LOCAL"){let n=r.local();switch(t){case "ISO":return n.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return n.format("YYYY-MM-DD");case "TIME_ONLY":return n.format("HH:mm:ss");default:return n.unix().toString()}}let o=r.utc();switch(t){case "ISO":return o.format("YYYY-MM-DD HH:mm:ss");case "DATE_ONLY":return o.format("YYYY-MM-DD");case "TIME_ONLY":return o.format("HH:mm:ss");default:return o.unix().toString()}},Ja=(i,t,e="UTC")=>{if(i===null)return null;if(i instanceof Date){if(isNaN(i.getTime()))throw new T("DateUtils::parseDate","INVALID_DATE_OBJECT");return i}try{let r=t?ve__default.default(i,t):ve__default.default(i);if(!r.isValid())throw new T("DateUtils::parseDate","INVALID_DATE_STRING");return e==="UTC"?r.utc().toDate():r.local().toDate()}catch(r){throw new T("DateUtils::parseDate","FAILED_TO_PARSE_DATE",r)}},ue=(i=new Date)=>ve__default.default(i).utc().format("YYYY-MM-DD HH:mm:ss");var Ya=(i,t)=>{try{let e=Ne__default.default.createHash("sha256").update(i).digest(),r=Ne__default.default.randomBytes(16),o=Ne__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");return n+=o.final("hex"),`${r.toString("hex")}:${n}`}catch(e){throw new T("Encryption::encryptSymmetric","FAILED_TO_ENCRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},Ga=(i,t)=>{try{let e=Ne__default.default.createHash("sha256").update(i).digest(),r=String(t).trim(),[o,n]=r.split(":");if(!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:data" but got "${r.substring(0,50)}..."`);let s=o.toLowerCase(),a=n.toLowerCase(),l=Ne__default.default.createDecipheriv("aes-256-cbc",e,Buffer.from(s,"hex")),d=l.update(a,"hex","utf8");return d+=l.final("utf8"),d}catch(e){throw new T("Encryption::decryptSymmetric","FAILED_TO_DECRYPT_SYMMETRICALLY",e instanceof Error?e:void 0)}},za=(i,t)=>{try{let e=Ne__default.default.randomBytes(32),r=Ne__default.default.randomBytes(16),o=Ne__default.default.createCipheriv("aes-256-cbc",e,r),n=o.update(t,"utf8","hex");n+=o.final("hex");let s=Ne.publicEncrypt(i,e);return `${r.toString("hex")}:${s.toString("hex")}:${n}`}catch(e){throw new T("Encryption::encryptAsymmetric","FAILED_TO_ENCRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}},Za=(i,t)=>{try{let e=String(t).trim(),[r,o,n]=e.split(":");if(!r||!o||!n)throw new Error(`Invalid encrypted value format: expected "iv:key:data" but got "${e.substring(0,50)}..."`);let s=Ne.privateDecrypt(i,Buffer.from(o,"hex")),a=Ne__default.default.createDecipheriv("aes-256-cbc",s,Buffer.from(r,"hex")),l=a.update(n,"hex","utf8");return l+=a.final("utf8"),l}catch(e){throw new T("Encryption::decryptAsymmetric","FAILED_TO_DECRYPT_ASYMMETRICALLY",e instanceof Error?e:void 0)}};var U=class{static defineMetadata(t,e,r,o){if((typeof r!="object"||r===null)&&typeof r!="function")throw new TypeError("target must be an object or function");let n=this.store.get(r);n||(n=new Map,this.store.set(r,n));let s=n.get(o);s||(s=new Map,n.set(o,s)),s.set(t,e);}static getMetadata(t,e,r){if((typeof e!="object"||e===null)&&typeof e!="function")throw new TypeError("target must be an object or function");let o=e;for(;o;){let n=this.store.get(o);if(n){let s=n.get(r);if(s&&s.has(t))return s.get(t)}o=Object.getPrototypeOf(o);}}};U.store=new WeakMap;var Vr="0123456789ABCDEFGHJKMNPQRSTVWXYZ",jr=Vr.length,Cp=10,Rp=16,Ap=(i,t)=>{let e="";for(let r=0;r<t;r++){let o=i%jr;e=Vr.charAt(o)+e,i=(i-o)/jr;}return e},xp=i=>{let t=Ne.randomBytes(i),e="";for(let r=0;r<i;r++){let o=t[r];e+=Vr.charAt(o%jr);}return e},Xa=()=>{let i=Math.floor(Date.now()/1e3),t=Ap(i,Cp),e=xp(Rp);return t+e};function Hr(i){return i.replace(/^[`"]|[`"]$/g,"")}function Jr(i,t,e){if(!i.includes(".")){let n=Hr(i);return `${t}.${n}`}let[r,o]=i.split(".");return r=Hr(r),o=Hr(o),r!==e?i:o==="*"?`${t}.*`:`${t}.${o}`}function q(i){return typeof i=="function"?i():i}var F=(i,t=new WeakMap)=>{if(i===null||typeof i!="object")return i;if(t.has(i))return t.get(i);if(Array.isArray(i)){let r=[];t.set(i,r);for(let o=0;o<i.length;o++)r[o]=F(i[o],t);return r}let e=Object.create(Object.getPrototypeOf(i)||{});t.set(i,e);for(let r of Object.getOwnPropertyNames(i)){let o=i[r];if(typeof o=="function"){e[r]=o;continue}e[r]=F(o,t);}return e};var je=class{};je.modelCaseConvention="camel",je.databaseCaseConvention="snake";var Pp=async(i,t,e,r,o=[],n=[],s=false)=>{let a=new t,l=new Set(e.filter(u=>u.hidden).map(u=>u.columnName)),d=new Map(e.map(u=>[u.databaseName,u])),m=o.length?new Set(o):null;if(await Promise.all(Object.keys(i).map(async u=>{let c=i[u],p=d.get(u)?.columnName??k(u,t.modelCaseConvention);if(p==="$annotations"&&!s){Dp(i,u,a,t,n);return}if(!r.has(p)||l.has(p)||m&&!m.has(p))return;if(c===null){a[p]=null;return}let y=r.get(p);if(y&&y.serialize){a[p]=await y.serialize(c);return}a[p]=c;})),m)for(let u of m)u in a||(a[u]=null);return a},Dp=(i,t,e,r,o=[])=>{let n=i[t];if(!n||!Object.keys(n).length)return;let s=o.length>0?new Set(o):null;if(!s)return;let a={};for(let l of Object.keys(n))s.has(l)&&(a[k(l,r.modelCaseConvention)]=n[l]);Object.keys(a).length>0&&(e[t]=a);},ce=async(i,t,e=[],r=[],o=false)=>{if(!i.length)return null;let n=t.getColumns(),s=new Map(n.map(d=>[d.columnName,d])),a=[];for(let d of e){if(d.toLowerCase().includes("as"))continue;let m=d;if(m.includes(".")&&(m=m.split(".").pop()),m==="*")continue;let u=s.get(m)?.columnName??k(m,t.modelCaseConvention);a.push(u);}e=a;let l=await Promise.all(i.map(async d=>await Pp(d,t,n,s,e,r,o)));return l.length===1?l[0]:l};var el=["postgres","cockroachdb"];function tl(i){let t=i.name,e=k(t,"snake");return Ip__default.default(e)}function rl(){return {}}var lt=class lt extends je{static get table(){let t=Object.getOwnPropertyDescriptor(this,"table");return t&&"value"in t?t.value:tl(this)}static set table(t){Object.defineProperty(this,"table",{value:t,writable:true,enumerable:true,configurable:true});}static get primaryKey(){return ll(this)}constructor(){super();}static async all(t={}){return await this.dispatchModelManager(t).find({ignoreHooks:t.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static query(t){return this.dispatchModelManager(t).query()}static dryQuery(t){return this.dispatchModelManager(t).dryQuery()}static async first(t){return this.dispatchModelManager(t).query().one({ignoreHooks:t?.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async find(t,e){return await this.dispatchModelManager(e).find(t)}static async findOneOrFail(t,e){return await this.dispatchModelManager(e).findOneOrFail(t)}static async findOne(t,e){return await this.dispatchModelManager(e).findOne(t)}static async findBy(t,e,r={}){return await this.dispatchModelManager(r).find({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneBy(t,e,r={}){return await this.dispatchModelManager(r).findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:{[t]:e}})}static async findOneByPrimaryKey(t,e={}){return await this.dispatchModelManager(e).findOneByPrimaryKey(t)}static async refresh(t,e={}){let r=this,o=r.dispatchModelManager(e),n=r.primaryKey,s=t[n],a=await o.findOneByPrimaryKey(s);return a||null}static async insert(t,e={}){return this.dispatchModelManager(e).insert(t,{ignoreHooks:e.ignoreHooks,returning:e.returning})}static async insertMany(t,e={}){return t.length?this.dispatchModelManager(e).insertMany(t,{ignoreHooks:e.ignoreHooks,returning:e.returning}):[]}static async sync(t,e,r,o,n={}){if(Array.isArray(r)||(r=[r]),!r.length)return;let s=this,l=Qt(s).find(y=>y.columnName===t);if(!l)throw new T(`${s.name}::sync`,"RELATION_NOT_FOUND");if(l.type!=="manyToMany")throw new T(`${s.name}::sync`,"RELATION_NOT_MANY_TO_MANY");let d=k(l.leftForeignKey,n.caseConvention||s.databaseCaseConvention),m=k(l.rightForeignKey,n.caseConvention||s.databaseCaseConvention),u=r.map((y,h)=>({[d]:e[s.primaryKey],[m]:y[l.model.primaryKey],...o?o(y,h):{}}));class c extends lt{static get table(){return l.throughModel}}c.databaseCaseConvention="preserve",c.modelCaseConvention="preserve",await c.dispatchModelManager(n).insertMany(u);}static async updateRecord(t,e,r={}){try{let o=this,n=o.dispatchModelManager(r);return e&&o.combineProps(t,e),await n.updateRecord(t)}catch(o){throw o instanceof T&&o.message==="MODEL_HAS_NO_PRIMARY_KEY"?new T(`${this.name}::updateRecord`,"MODEL_HAS_NO_PRIMARY_KEY"):o}}static async firstOrInsert(t,e,r={}){r.fullResponse||(r.fullResponse=false);let n=this.dispatchModelManager(r),s=await n.findOne({where:t});if(s)return r.fullResponse?{isNew:false,model:s}:s;let a=await n.insert(e);return r.fullResponse?{isNew:true,model:a}:a}static async upsert(t,e,r={updateOnConflict:true}){let o=this,n=o.dispatchModelManager(r),a=Object.keys(t).length>0?await n.findOne({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[],where:t}):null;return a?(e[o.primaryKey]=a[o.primaryKey],r.updateOnConflict?await n.updateRecord(e,{returning:r.returning}):a):await n.insert(e,{ignoreHooks:r.ignoreHooks,returning:r.returning??["*"]})}static async upsertMany(t,e,r={updateOnConflict:true}){if(!e.length)return [];let o=this,n=o.dispatchModelManager(r);if(!e.every(u=>{let c=new Set(Object.keys(u));return t.every(p=>c.has(p))}))throw new T("Model::upsertMany","CONFLICT_COLUMNS_NOT_PRESENT_IN_DATA");let s=Object.keys(e[0]),a=await n.upsertMany(t,s,e,{ignoreHooks:r.ignoreHooks,returning:r.returning,updateOnConflict:r.updateOnConflict??true}),l=o.sqlInstance.getDbType();if(el.includes(l))return await ce(a,o,r.returning);let d=n.query();r.returning?.length&&d.select(...r.returning);let m=new Map;return t.forEach(u=>{e.forEach(c=>{m.set(u,[...m.get(u)||[],c[u]]);});}),d.where(u=>{t.forEach(c=>{u.orWhereIn(c,m.get(c)||[]);});}),d.many({ignoreHooks:r.ignoreHooks?["afterFetch","beforeFetch"]:[]})}static async deleteRecord(t,e){return this.dispatchModelManager(e).deleteRecord(t)}static async softDelete(t,e,r){let o=this,{column:n=o.softDeleteColumn,value:s=o.softDeleteValue}=e||{};return t[n]=s,await o.dispatchModelManager({trx:r?.trx,connection:r?.connection}).updateRecord(t),typeof s=="string"?(t[n]=new Date(s),t):(t[n]=s,t)}static async truncate(t={}){return this.dispatchModelManager(t).query().truncate()}static async getTableInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getTableInfo(t.table)}static async getIndexInfo(){let t=this;return t.establishConnection(),t.sqlInstance.getIndexInfo(t.table)}static async getTableSchema(){let t=this;return t.establishConnection(),t.sqlInstance.getTableSchema(t.table)}static combineProps(t,e){for(let r in e)Object.assign(t,{[r]:e[r]});}static getColumns(){return Et(this)}static getRelations(){return al(this)}static getIndexes(){return dl(this)}static getUniques(){return ml(this)}static column(t,...e){K(...e)(this.prototype,t);}static hasOne(t,...e){nl(...e)(this.prototype,t);}static hasMany(t,...e){sl(...e)(this.prototype,t);}static belongsTo(t,...e){ol(...e)(this.prototype,t);}static manyToMany(t,...e){il(...e)(this.prototype,t);}static establishConnection(){let t=Ae.instance;if(!t)throw new T("sqlInstance not initialized, did you defined it in SqlDataSource.connect static method?","CONNECTION_NOT_ESTABLISHED");this.sqlInstance=t;}static dispatchModelManager(t){let e;if(t?.connection)e=t.connection.getModelManager(this);else if(t?.trx)e=t.trx.sql.getModelManager(this);else {let r=this;r.establishConnection(),e=r.sqlInstance.getModelManager(r);}return t?.replicationMode&&e.setReplicationMode(t.replicationMode),e}mergeProps(t){this.constructor.combineProps(this,t);}async save(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new T(r.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");let n=e[o],s=n?{[o]:n}:{},a=e,l=await r.upsert(s,a,{updateOnConflict:true,...t});return r.combineProps(this,l),this}async update(t,e={}){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new T(o.name+"::save","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(o.name+"::update","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.updateRecord(r,t,e);}async softDelete(t,e){let r=this,o=r.constructor,n=o.primaryKey;if(!n)throw new T(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY");if(!r[n])throw new T(o.name+"::softDelete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await o.softDelete(r,t,e);}async delete(t={}){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new T(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(r.name+"::delete","MODEL_HAS_NO_PRIMARY_KEY_VALUE");await r.deleteRecord(this,t);}async refresh(t){let e=this,r=e.constructor,o=r.primaryKey;if(!o)throw new T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY");if(!e[o])throw new T(r.name+"::refresh","MODEL_HAS_NO_PRIMARY_KEY_VALUE");let s=await r.refresh(this,t);return r.combineProps(this,s),this}};lt.softDeleteColumn="deletedAt",lt.softDeleteValue=ue();var vt=lt;var pe=class{constructor(t,e){this.model=vt;this.columnName="";this.relatedModel="";this.model=t,this.columnName=e,this.relatedModel=this.model.table;}};var kt=class extends pe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="belongsTo";}};var Bt=class extends pe{constructor(e,r,o){super(e,r);this.type="hasMany";this.foreignKey=o,this.type="hasMany";}};var Kt=class extends pe{constructor(t,e,r){super(t,e),this.foreignKey=r,this.type="hasOne";}};var Lt=class extends pe{constructor(e,r,o){super(e,r);this.type="manyToMany";this.primaryModel=o.primaryModel,this.relatedModel=e.table,this.throughModel=o.throughModel,this.leftForeignKey=o.leftForeignKey,this.rightForeignKey=o.rightForeignKey;}};var Ut=Symbol("columns"),Ft=Symbol("primaryKey"),se=Symbol("relations"),ul=Symbol("indexes"),cl=Symbol("uniques"),xe=i=>`${Ip__default.default.singular(i)}_id`,Yr=(i,t)=>`idx_${i}_${t}`,ie=(i,t)=>`uq_${i}_${t}`,J=(i,t,e)=>`fk_${i}_${t}${e?`_${e}`:""}`,Pe=(i,t)=>`pk_${i}_${t}`;function K(i={primaryKey:false}){let t=i?.primaryKey??false;return (e,r)=>{let o=e.constructor;if(t){if(U.getMetadata(Ft,e))throw new T("ModelDecorator::column","MULTIPLE_PRIMARY_KEYS_NOT_ALLOWED");U.defineMetadata(Ft,r,e);}let n=i.databaseName??k(r,o.databaseCaseConvention),s={columnName:r,serialize:i.serialize,prepare:i.prepare,hidden:i.hidden,isPrimary:t,primaryKeyConstraintName:i.primaryKeyConstraintName??Pe(o.table,r),autoUpdate:i.autoUpdate,databaseName:n,openApi:i.openApi,type:i.type,length:i?.length,precision:i?.precision,scale:i?.scale,withTimezone:i?.withTimezone,constraints:{nullable:i.nullable,default:i.default}},a=U.getMetadata(Ut,e)||[];a.push(s),U.defineMetadata(Ut,a,e);}}K.primary=vp;K.date=jp;K.boolean=Wp;K.json=Vp;K.uuid=Kp;K.ulid=Lp;K.integer=Qp;K.float=Ep;K.increment=kp;K.bigIncrement=Bp;K.encryption={symmetric:Up,asymmetric:Fp};function vp(i={}){return K({...i,primaryKey:true})}function Ep(i={}){return K({type:"float",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseFloat(t)}})}function Qp(i={}){return K({type:"integer",...i,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:typeof t=="string"?+t:Number.parseInt(t)}})}function kp(i={}){return K({type:"increment",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function Bp(i={}){return K({type:"bigIncrement",...i,primaryKey:true,nullable:false,serialize:t=>{if(t!==void 0)return t===null?null:typeof t=="number"?t:Number.parseInt(t)}})}function Kp(i={}){return K({type:"uuid",...i,prepare:t=>t||Ne__default.default.randomUUID()})}function Lp(i={}){return K({type:"ulid",...i,prepare:t=>t||Xa()})}function Up(i){return K({...i,prepare:t=>t&&Ya(i.key,t),serialize:t=>t&&Ga(i.key,t)})}function Fp(i){return K({...i,prepare:t=>t&&za(i.publicKey,t),serialize:t=>t&&Za(i.privateKey,t)})}function Wp(i={}){return K({type:"boolean",...i,serialize:t=>!!t,prepare:t=>!!t})}function jp(i={}){let{format:t="ISO",timezone:e="UTC",autoUpdate:r=false,autoCreate:o=false,...n}=i;return K({type:"datetime",...n,autoUpdate:r,prepare:s=>s?r?Ot(new Date,t,e):typeof s=="string"?s:Ot(s,t,e):o?Ot(new Date,t,e):null,serialize:s=>{if(s!==void 0)return s===null?null:Ja(s,t,e)}})}function Vp(i={}){return K({type:"jsonb",...i,serialize:t=>typeof t=="string"?JSON.parse(t):t,prepare:t=>typeof t!="string"?JSON.stringify(t):t})}function Et(i){try{return U.getMetadata(Ut,i.prototype)||[]}catch{return []}}function ol(i,t,e){return (r,o)=>{let n=()=>xe(i().table),s=()=>{let d=r.constructor.table,m=t||n();return J(d,m,i().table)},a={type:"belongsTo",columnName:o,model:i,foreignKey:t?String(t):n,constraintName:e?.constraintName??s,onUpdate:e?.onUpdate,onDelete:e?.onDelete},l=U.getMetadata(se,r)||[];l.push(a),U.defineMetadata(se,l,r);}}function nl(i,t){return (e,r)=>{let o=()=>xe(e.constructor.table),n={type:"hasOne",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(se,e)||[];s.push(n),U.defineMetadata(se,s,e);}}function sl(i,t){return (e,r)=>{let o=()=>xe(e.constructor.table),n={type:"hasMany",columnName:r,model:i,constraintName:"None",foreignKey:t?String(t):o},s=U.getMetadata(se,e)||[];s.push(n),U.defineMetadata(se,s,e);}}function il(i,t,e,r){return (o,n)=>{let{leftForeignKey:s,rightForeignKey:a}=e??{},l=typeof t!="string",d=typeof t=="string"?t:()=>t().table,m=o.constructor.table,u=()=>xe(m),c=()=>xe(i().table),p=()=>J(q(d),s?String(s):u()),y={type:"manyToMany",columnName:n,model:i,constraintName:r?.constraintName??p,foreignKey:s?String(s):u,onDelete:r?.onDelete,onUpdate:r?.onUpdate,manyToManyOptions:{primaryModel:m,throughModel:d,leftForeignKey:s?String(s):u,rightForeignKey:a?String(a):c,wasModelProvided:l}},h=U.getMetadata(se,o)||[];h.push(y),U.defineMetadata(se,h,o);}}function al(i){return U.getMetadata(se,i.prototype)||[]}function Qt(i){return (U.getMetadata(se,i.prototype)||[]).map(e=>{let{type:r,model:o,columnName:n,foreignKey:s}=e,a=q(s),l=o();switch(r){case "belongsTo":return new kt(l,n,a);case "hasOne":return new Kt(l,n,a);case "hasMany":return new Bt(l,n,a);case "manyToMany":if(!e.manyToManyOptions)throw new T("ModelDecorator::getRelations","MANY_TO_MANY_RELATION_MUST_HAVE_A_THROUGH_MODEL");let d=o();return new Lt(d,n,{primaryModel:e.manyToManyOptions.primaryModel,throughModel:q(e.manyToManyOptions.throughModel),leftForeignKey:q(e.manyToManyOptions.leftForeignKey),rightForeignKey:q(e.manyToManyOptions.rightForeignKey)});default:throw new T("ModelDecorator::getRelations",`UNKNOWN_RELATION_TYPE_${r}`)}})}function ll(i){return U.getMetadata(Ft,i.prototype)}function dl(i){return U.getMetadata(ul,i.prototype)||[]}function ml(i){return U.getMetadata(cl,i.prototype)||[]}var f=class{constructor(t){this.model=t;let e=Et(t);this.modelColumnsMap=new Map(e.map(r=>[r.columnName,r]));}formatStringColumn(t,e){if(e==="*")return "*";if(e.includes(".")){let[n,s]=e.split(".");if(s==="*")switch(t){case "mysql":case "mariadb":return `\`${n}\`.*`;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${n}".*`;case "mssql":return `[${n}].*`;default:throw new Error(`Unsupported database type: ${t}`)}let a=this.modelColumnsMap.get(s)?.databaseName??k(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??k(e,this.model.databaseCaseConvention);switch(t){case "mysql":case "mariadb":return `\`${o}\``;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${o}"`;case "mssql":return `[${o}]`;default:throw new Error(`Unsupported database type: ${t}`)}}formatStringTable(t,e){e=e.replace(/\s+/g," ").trim();let r="";switch(e.toLowerCase().includes(" as ")&&([e,r]=e.split(" as ")),t){case "mysql":case "mariadb":return `\`${e}\`${r?` as \`${r}\``:""}`;case "postgres":case "cockroachdb":case "sqlite":case "oracledb":return `"${e}"${r?` as "${r}"`:""}`;case "mssql":return `[${e}]${r?` as [${r}]`:""}`;default:return `${e}${r?` as ${r}`:""}`}}async prepareColumns(t,e,r="insert"){if(!t.length)return {columns:t,values:e};let o=[],n=[];for(let s=0;s<t.length;s++){let a=t[s],l=e[s];a==="*"||a==="$annotations"||(o.push(a),n.push(l));}await Promise.all(o.map(async(s,a)=>{let l=o[a],d=n[a],m=this.modelColumnsMap.get(l),u=d;m&&(r==="insert"&&m.prepare?u=await m.prepare(d):r==="update"&&(u=await m.prepare?.(d)??d)),n[a]=u;}));for(let s of this.modelColumnsMap.keys())if(!o.includes(s)){let a=this.modelColumnsMap.get(s);if(!a||r==="insert"&&s===this.model.primaryKey&&!a.prepare)continue;(r==="insert"||a.autoUpdate)&&(o.push(s),n.push(a.prepare?.(void 0)??void 0));}return {columns:o,values:n}}getFromForWriteOperations(t,e){if(typeof e.table=="string")return this.formatStringTable(t,e.table);let r=new b(this.model,t);return Array.isArray(e.table)?`(${r.parse(e.table).sql})`:`(${r.parse([e.table]).sql})`}};var Gr=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};if(e.children.length===1&&e.children[0]instanceof We){let m=e.children[0];return {sql:`EXEC sp_rename '${e.table}', '${m.newName}'`,bindings:[]}}let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},pl=new Gr;var zr=class{toSql(t){return {sql:`drop column [${t.column}]`,bindings:[]}}},fl=new zr;var Zr=class{toSql(t){return {sql:`drop constraint [${t.constraintName}]`,bindings:[]}}},yl=new Zr;var Xr=class{toSql(t){return {sql:`drop constraint DF_${t.column}`,bindings:[]}}},hl=new Xr;var eo=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] null`,bindings:[]}}},gl=new eo;var to=class{toSql(t){return {sql:`drop constraint [${`pk_${t.table}`}]`,bindings:[]}}},bl=new to;var ro=class{toSql(t){let e=t;return {sql:`sp_rename '${this.model?.table??""}.${e.oldName}', '${e.newName}', 'COLUMN'`,bindings:[]}}},Tl=new ro;var oo=class{toSql(t){return {sql:`[${t.newName}]`,bindings:[]}}},Nl=new oo;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 no=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:[]}}},wl=new no;var so=class{toSql(t){let e=t;return g.warn("MSSQL requires the full column type when altering nullability. This operation may need manual adjustment."),{sql:`alter column [${e.column}] not null`,bindings:[]}}},ql=new so;var io=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("mssql",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} varchar(max)`,bindings:[]};if(n==="uuid")return {sql:`${o} uniqueidentifier`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigint identity(1,1)`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} int`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} float`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`,bindings:[]}}if(n==="datetime"||n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime2${s}`,bindings:[]}}if(n==="boolean"||n==="bool")return {sql:`${o} bit`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} varbinary(max)`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} nvarchar(max)`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar(255)`,bindings:[]}}return n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} int identity(1,1)`,bindings:[]}:{sql:`${o} int`,bindings:[]}:n==="geometry"?{sql:`${o} geometry`,bindings:[]}:n==="point"?{sql:`${o} geometry`,bindings:[]}:n==="linestring"?{sql:`${o} geometry`,bindings:[]}:n==="polygon"?{sql:`${o} geometry`,bindings:[]}:n==="multipoint"?{sql:`${o} geometry`,bindings:[]}:{sql:`${o} ${n}${e.length?`(${e.length})`:""}`,bindings:[]}}},Sl=new io;var ao=class{toSql(t){return {sql:"",bindings:[]}}},Ml=new ao;var lo=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint [${e.constraintName}] `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("mssql",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint [${e.constraintName}] `:"",s=o.map(a=>r.formatStringColumn("mssql",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("mssql",q(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("mssql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mssql",q(d))).join(", "),l=`${e.constraintName?`constraint [${e.constraintName}] `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},_l=new lo;var mo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mssql"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+\[[^\]]+\]\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},Cl=new mo;var uo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mssql",e.fromNode),bindings:[]}}},Rl=new uo;var co=class{toSql(t){return {sql:"",bindings:[]}}},Al=new co;var po=class{toSql(t){return g.warn("MSSQL does not support DISTINCT ON. This clause will be ignored."),{sql:"",bindings:[]}}},xl=new po;var fo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},Pl=new fo;var yo=class{toSql(t){return {sql:`-- MSSQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Dl=new yo;var ho=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mssql",e.table)} as [${e.alias}]`,bindings:[]}:{sql:a.formatStringTable("mssql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"mssql").parse(r),s=e.alias&&e.alias.length?` as [${e.alias}]`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Il=new ho;var go=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mssql",e.column),bindings:[]}}},$l=new go;var bo=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 f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} @${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`@${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Ol=new bo;var To=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mssql",e.table),n=e.columns.map(a=>`[${a}]`).join(", ");return {sql:`${e.unique?"unique ":""}[${e.indexName}] on ${o} (${n})`,bindings:[]}}},vl=new To;var No=class{toSql(t){let e=t;return {sql:`[${e.indexName}] on [${e.table}]`,bindings:[]}}},El=new No;var wo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n).filter(c=>n[c]!==void 0);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("mssql",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof _?y.push(h.rawValue):(l.push(h),y.push(`@${m++}`));d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>`inserted.${r.formatStringColumn("mssql",p)}`).join(", ");u=u.replace(") values",`) output ${c} values`);}else {let c=this.getOutputColumns(s,r);u=u.replace(") values",`) output ${c} values`);}return {sql:u,bindings:l}}getOutputColumns(t,e){let r=[...t],o=this.model.primaryKey;return o&&!t.includes(o)&&r.push(o),r.map(n=>`inserted.${e.formatStringColumn("mssql",n)}`).join(", ")}},Ql=new wo;var qo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mssql",o),a=r.formatStringColumn("mssql",n);return {sql:`${r.formatStringTable("mssql",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},kl=new qo;var So=class{toSql(t){let e=t;return {sql:`fetch next @${e.currParamIndex} rows only`,bindings:[e.limit]}}},Bl=new So;var Mo=class{toSql(t){return {sql:"",bindings:[]}}},Kl=new Mo;var _o=class{toSql(t){let e=t;return {sql:`offset @${e.currParamIndex} rows`,bindings:[e.offset]}}},Ll=new _o;var Co=class{toSql(t){let e=t;return e.isRawValue?{sql:e.table,bindings:[]}:(g.warn("MSSQL does not support ON CONFLICT or ON DUPLICATE KEY. Use MERGE statement for upsert operations. This clause will be ignored. Consider using raw queries for MSSQL upserts."),{sql:"",bindings:[]})}},Ul=new Co;var Ro=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mssql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Fl=new Ro;var Ao=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Wl=new Ao;var xo=class{toSql(t){return {sql:`SELECT
136
- fk.name as name,
137
- c.name as column_name,
138
- rt.name as referenced_table,
139
- rc.name as referenced_column,
140
- fk.update_referential_action_desc as on_update,
141
- fk.delete_referential_action_desc as on_delete
142
- FROM sys.foreign_keys fk
143
- INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
144
- INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id
145
- INNER JOIN sys.tables rt ON fkc.referenced_object_id = rt.object_id
146
- INNER JOIN sys.columns rc ON fkc.referenced_object_id = rc.object_id AND fkc.referenced_column_id = rc.column_id
147
- WHERE fk.parent_object_id = OBJECT_ID('${t.table}')`,bindings:[]}}},jl=new xo;var Po=class{toSql(t){return {sql:`SELECT
148
- i.name as index_name,
149
- c.name as column_name,
150
- i.is_unique as is_unique
151
- FROM sys.indexes i
152
- INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
153
- INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
154
- WHERE i.object_id = OBJECT_ID('${t.table}')
155
- AND i.is_primary_key = 0
156
- AND i.type > 0`,bindings:[]}}},Vl=new Po;var Do=class{toSql(t){return {sql:`SELECT
157
- tc.CONSTRAINT_NAME as name,
158
- kcu.COLUMN_NAME as column_name
159
- FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
160
- JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
161
- ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
162
- WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
163
- AND tc.TABLE_NAME = '${t.table}'
164
- ORDER BY kcu.ORDINAL_POSITION`,bindings:[]}}},Hl=new Do;var Io=class{toSql(t){return {sql:`SELECT
165
- c.COLUMN_NAME as column_name,
166
- c.DATA_TYPE as data_type,
167
- c.IS_NULLABLE as is_nullable,
168
- c.COLUMN_DEFAULT as column_default,
169
- c.CHARACTER_MAXIMUM_LENGTH as char_length,
170
- c.NUMERIC_PRECISION as numeric_precision,
171
- c.NUMERIC_SCALE as numeric_scale
172
- FROM INFORMATION_SCHEMA.COLUMNS c
173
- WHERE c.TABLE_NAME = '${t.table}'
174
- ORDER BY c.ORDINAL_POSITION`,bindings:[]}}},Jl=new Io;var $o=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mssql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"mssql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"mssql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new f(this.model).formatStringColumn("mssql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mssql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as [${t}]`:""}},Yl=new $o;var Oo=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:`table ${new f(this.model).getFromForWriteOperations("mssql",e.fromNode)}`,bindings:[]}}},Gl=new Oo;var vo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},zl=new vo;var Eo=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mssql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((l,d)=>{let m=e.currParamIndex+d-n,u=e.values[d];return u instanceof _?(n++,`${r.formatStringColumn("mssql",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("mssql",l)} = @${m}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},Zl=new Eo;var Qo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.value,o=e.currParamIndex;if(this.isRawNode(r)){let a=this.formatRawIdentifierIfPossible(r.rawValue);return {sql:`${new f(this.model).formatStringColumn("mssql",e.column)} ${e.operator} ${a}`.trim(),bindings:[]}}if(Array.isArray(r)){let a=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.toLowerCase()==="between"){let m=`@${o} AND @${o+1}`,u=`${a} between ${m}`;return e.isNegated&&(u=`not (${u})`),{sql:u.trim(),bindings:r}}let l=r.map((m,u)=>`@${o+u}`).join(", "),d=`${a} ${e.operator} (${l})`;return e.isNegated&&(d=`not (${d})`),{sql:d.trim(),bindings:r}}let n=new f(this.model).formatStringColumn("mssql",e.column);if(e.operator.includes("null")){let a=`${n} ${e.operator}`;return e.isNegated&&(a=`not (${a})`),{sql:a.trim(),bindings:[]}}if(r===void 0)return {sql:"",bindings:[]};let s=`${n} ${e.operator} @${o}`;return e.isNegated&&(s=`not (${s})`),{sql:s.trim(),bindings:[r]}}isRawNode(t){if(!t||!(typeof t=="object"))return false;let r="rawValue"in t,o=t.isRawValue===true;return r&&o}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mssql",t):t}},Xl=new Qo;var ko=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"mssql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},ed=new ko;var Bo=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(this.model).formatStringColumn("mssql",e.column);switch(e.jsonOperator){case "=":o=`${s} = @${r}`,n=[JSON.stringify(e.value)];break;case "contains":case "not contains":o=`CHARINDEX(@${r}, ${s}) > 0`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},td=new Bo;var Ko=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new b(this.model,"mssql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},rd=new Ko;var Lo=class{toSql(t){let e=t,r=new b(this.model,"mssql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return e.clause==="materialized"&&g.warn("MSSQL does not support MATERIALIZED CTEs. The clause will be ignored."),{sql:`[${e.alias}] as (${n.sql})`,bindings:n.bindings}}},od=new Lo;var Uo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},nd=new Uo;var Fo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},sd=new Fo;var Wo=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`\`${o}\``).join(", ")})`,bindings:[]}}},id=new Wo;var jo=class{toSql(t){let e=t,r=new b(this.model,"mysql"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify column \`${e.column}\` ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?"":" not null";a+=l;}if(e.options.dropDefault)a+=" drop default";else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=` default ${l}`;}return e.options.unique!==void 0&&e.options.unique&&(a+=" unique"),{sql:a,bindings:[]}}},ad=new jo;var Vo=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(c.file==="add_column")s.push(p);else if(c.file==="add_constraint"||c.folder==="constraint"){let h=s[s.length-1]??"",N=/^\s*add\s+column\b/i.test(h),M=/^\s*add\s+constraint\b/i.test(p);if(N&&!M){let $=p.replace(/^\s*add\s+/i,"").trimStart();s[s.length-1]=`${h} ${$}`;}else {let $=/^\s*add\b/i.test(p)?p:`add ${p}`;s.push($);}}else c.file==="set_default"||c.file==="drop_default"||c.file==="set_not_null"||c.file,s.push(p);a.push(...y);}let l=s.join(", "),d=e.ifExists?"if exists ":"";return {sql:/^\s*drop\s+index\b/i.test(l)?l:`${d}${o} ${l}`,bindings:a}}},ld=new Vo;var Ho=class{toSql(t){return {sql:`drop column \`${t.column}\``,bindings:[]}}},dd=new Ho;var Jo=class{toSql(t){return {sql:`drop constraint \`${t.constraintName}\``,bindings:[]}}},md=new Jo;var Yo=class{toSql(t){return {sql:`alter column \`${t.column}\` drop default`,bindings:[]}}},ud=new Yo;var Go=class{toSql(t){return {sql:"",bindings:[]}}},cd=new Go;var zo=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},pd=new zo;var Zo=class{toSql(t){let e=t;return {sql:`rename column \`${e.oldName}\` to \`${e.newName}\``,bindings:[]}}},fd=new Zo;var Xo=class{toSql(t){return {sql:`\`${t.newName}\``,bindings:[]}}},yd=new Xo;var en=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:[]}}},hd=new en;var tn=class{toSql(t){return {sql:"",bindings:[]}}},gd=new tn;var rn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("mysql",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="longtext"||n==="mediumtext"||n==="tinytext"||n==="text")return {sql:`${o} ${n}`,bindings:[]};if(n==="integer"||n==="int"){let s="int";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="tinyint")return {sql:`${o} tinyint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} mediumint`,bindings:[]};if(n==="bigint"){let s="bigint";return e.autoIncrement&&(s+=" auto_increment"),{sql:`${o} ${s}`,bindings:[]}}else {if(n==="float")return {sql:`${o} float`,bindings:[]};if(n==="double")return {sql:`${o} double`,bindings:[]};if(n==="real")return {sql:`${o} double`,bindings:[]};if(n==="decimal"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} decimal(${s}, ${a})`,bindings:[]}}else if(n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`.trimEnd(),bindings:[]}}else if(n==="datetime"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} datetime${s}`.trimEnd(),bindings:[]}}else if(n==="timestamp"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${s}`.trimEnd(),bindings:[]}}else {if(n==="year")return {sql:`${o} year`,bindings:[]};if(n==="boolean")return {sql:`${o} boolean`,bindings:[]};if(n==="varbinary"){let s=e.length??255;return {sql:`${o} varbinary(${s})`,bindings:[]}}else if(n==="binary"){let s=e.length??255;return {sql:`${o} binary(${s})`,bindings:[]}}else {if(n==="bytea"||n==="blob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} json`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} enum(${s})`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}else {if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},bd=new rn;var on=class{toSql(t){return {sql:`after \`${t.column}\``,bindings:[]}}},Td=new on;var nn=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){let o=(e.columns??[]).map(s=>r.formatStringColumn("mysql",q(s))).join(", ");return {sql:`${e.constraintName?`constraint \`${e.constraintName}\` `:""}primary key (${o})`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns.map(s=>r.formatStringColumn("mysql",q(s))).join(", "),n=e.constraintName?`constraint \`${e.constraintName}\` `:"";return e.constraintName?{sql:`${n}unique (${o})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let o=e.defaultValue;return o instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let o=(e.columns??[]).map(d=>r.formatStringColumn("mysql",q(d))).join(", "),n=r.formatStringTable("mysql",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("mysql",q(d))).join(", "),l=`${e.constraintName?`constraint \`${e.constraintName}\` `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},Nd=new nn;var sn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"mysql"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let N=`${y} ${h}`.trim();N=N.replace(/(references\s+`[^`]+`\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},wd=new sn;var an=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},qd=new an;var ln=class{toSql(t){return {sql:"distinct",bindings:[]}}},Sd=new ln;var dn=class{toSql(t){return g.warn("MySQL does not support DISTINCT ON"),{sql:"",bindings:[]}}},Md=new dn;var mn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},_d=new mn;var un=class{toSql(t){return {sql:`-- MySQL does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},Cd=new un;var cn=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("mysql",e.table)} as \`${e.alias}\``,bindings:[]}:{sql:a.formatStringTable("mysql",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"mysql").parse(r),s=e.alias&&e.alias.length?` as \`${e.alias}\``:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},Rd=new cn;var pn=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("mysql",e.column),bindings:[]}}},Ad=new pn;var fn=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 f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},xd=new fn;var yn=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("mysql",e.table),n=e.columns.map(a=>`\`${a}\``).join(", ");return {sql:`${e.unique?"unique ":""}\`${e.indexName}\` on ${o} (${n})`,bindings:[]}}},Pd=new yn;var hn=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:[]}}},Dd=new hn;var gn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(u=>r.formatStringColumn("mysql",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof _?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},Id=new gn;var bn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("mysql",o),a=r.formatStringColumn("mysql",n);return {sql:`${r.formatStringTable("mysql",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},$d=new bn;var Tn=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},Od=new Tn;var Hp={for_update:"for update",for_share:"lock in share mode"},Nn=class{toSql(t){let e=t,r=Hp[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),{sql:r,bindings:[]}}},vd=new Nn;var wn=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Ed=new wn;var qn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model);if(e.mode==="ignore"){let n=e.conflictColumns?.[0]||"id",s=r.formatStringColumn("mysql",`${e.table}.${n}`);return {sql:`AS new ON DUPLICATE KEY UPDATE ${s} = ${s}`,bindings:[]}}return {sql:`AS new ON DUPLICATE KEY UPDATE ${e.columnsToUpdate.map(n=>`${r.formatStringColumn("mysql",n)} = new.${r.formatStringColumn("mysql",n)}`).join(", ")}`,bindings:[]}}},Qd=new qn;var Sn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("mysql",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},kd=new Sn;var Mn=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Bd=new Mn;var _n=class{toSql(t){return {sql:`SELECT
175
- k.CONSTRAINT_NAME AS name,
176
- k.COLUMN_NAME AS column_name,
177
- k.REFERENCED_TABLE_NAME AS referenced_table,
178
- k.REFERENCED_COLUMN_NAME AS referenced_column,
179
- r.UPDATE_RULE AS on_update,
180
- r.DELETE_RULE AS on_delete
181
- FROM information_schema.KEY_COLUMN_USAGE k
182
- JOIN information_schema.REFERENTIAL_CONSTRAINTS r
183
- ON k.CONSTRAINT_NAME = r.CONSTRAINT_NAME AND k.CONSTRAINT_SCHEMA = r.CONSTRAINT_SCHEMA
184
- WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.REFERENCED_TABLE_NAME IS NOT NULL
185
- ORDER BY k.POSITION_IN_UNIQUE_CONSTRAINT`,bindings:[]}}},Kd=new _n;var Cn=class{toSql(t){return {sql:`SHOW INDEX FROM \`${t.table}\``,bindings:[]}}},Ld=new Cn;var Rn=class{toSql(t){return {sql:`SELECT
186
- CONSTRAINT_NAME AS name,
187
- COLUMN_NAME AS column_name
188
- FROM information_schema.KEY_COLUMN_USAGE k
189
- WHERE k.TABLE_SCHEMA = DATABASE() AND k.TABLE_NAME = '${t.table}' AND k.CONSTRAINT_NAME = 'PRIMARY'
190
- ORDER BY k.ORDINAL_POSITION`,bindings:[]}}},Ud=new Rn;var An=class{toSql(t){return {sql:`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS char_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = '${t.table}' ORDER BY ORDINAL_POSITION`,bindings:[]}}},Fd=new An;var xn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("mysql",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"mysql").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"mysql").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new f(this.model).formatStringColumn("mysql",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"mysql").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length?` as \`${t}\``:""}},Wd=new xn;var Pn=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("mysql",e.fromNode),bindings:[]}}},jd=new Pn;var Dn=class{toSql(t){let e=t,r=new b(this.model,"mysql"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Vd=new Dn;var In=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("mysql",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof _?`${r.formatStringColumn("mysql",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("mysql",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Hd=new In;var $n=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("mysql",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(this.model).formatStringColumn("mysql",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("mysql",t):t}},Jd=new $n;var On=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"mysql"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Yd=new On;var vn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(this.model).formatStringColumn("mysql",e.column);switch(e.jsonOperator){case "=":r=`${n} = CAST(? AS JSON)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`JSON_CONTAINS(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Gd=new vn;var En=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new b(this.model,"mysql"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},zd=new En;var Qn=class{toSql(t){let e=t,r=new b(this.model,"mysql"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},Zd=new Qn;var kn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add ${o}`,bindings:[]}}},Xd=new kn;var Bn=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},em=new Bn;var Kn=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},tm=new Kn;var Ln=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`modify "${e.column}" ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`modify "${e.column}" null`:`modify "${e.column}" not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, modify "${e.column}" default null`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"?l="1":l==="FALSE"?l="0":l=`'${l}'`),a+=`, modify "${e.column}" default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},rm=new Ln;var Un=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);s.push(u.trim()),a.push(...c);}let l=s.join(", ");return {sql:`${o} ${l}`,bindings:a}}},om=new Un;var Fn=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},nm=new Fn;var Wn=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},sm=new Wn;var jn=class{toSql(t){return {sql:`modify "${t.column}" default null`,bindings:[]}}},im=new jn;var Vn=class{toSql(t){return {sql:`modify "${t.column}" null`,bindings:[]}}},am=new Vn;var Hn=class{toSql(t){return {sql:"drop primary key",bindings:[]}}},lm=new Hn;var Jn=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},dm=new Jn;var Yn=class{toSql(t){return {sql:`rename to "${t.newName}"`,bindings:[]}}},mm=new Yn;var Gn=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:[]}}},um=new Gn;var zn=class{toSql(t){return {sql:`modify "${t.column}" not null`,bindings:[]}}},cm=new zn;var Zn=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("oracledb",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar2(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} clob`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar2(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar2(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} number(19) generated by default as identity`,bindings:[]}:{sql:`${o} number(19)`,bindings:[]};if(n==="tinyint")return {sql:`${o} number(3)`,bindings:[]};if(n==="smallint")return {sql:`${o} number(5)`,bindings:[]};if(n==="mediumint")return {sql:`${o} number(7)`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} binary_float`,bindings:[]};if(n==="double")return {sql:`${o} binary_double`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} number(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} number(4)`,bindings:[]};if(n==="time")return {sql:`${o} varchar2(8)`,bindings:[]};if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with time zone":"",a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${a}${s}`.trimEnd(),bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} number(1)`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} blob`,bindings:[]};if(n==="json"||n==="jsonb")return {sql:`${o} clob`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} varchar2(255) check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} varchar2(255)`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} number(10) generated by default as identity`,bindings:[]}:{sql:`${o} number(10)`,bindings:[]};if(n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint")return {sql:`${o} sdo_geometry`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},pm=new Zn;var Xn=class{toSql(t){return {sql:"",bindings:[]}}},fm=new Xn;var es=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("oracledb",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("oracledb",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"?{sql:"default 1",bindings:[]}:o==="FALSE"?{sql:"default 0",bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("oracledb",q(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("oracledb",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("oracledb",q(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},ym=new es;var ts=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"oracledb"),s=[],a=[];for(let m of e.children){let{sql:u,bindings:c}=n.parse([m]);if(m.folder==="constraint"){let p=s.pop()??"",y=u;if(/not null/i.test(y)||/null/i.test(y)||/default/i.test(y)){let h=`${p} ${y}`.trim();h=h.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),h=h.replace(/(check\s*\([^)]+\))\s+(default\s+(?:'[^']*'|\S+))/i,"$2 $1"),s.push(h),a.push(...c);continue}s.push(p),s.push(y),a.push(...c);continue}s.push(u),a.push(...c);}for(let m of e.namedConstraints){let{sql:u,bindings:c}=n.parse([m]);s.push(u),a.push(...c);}let l=s.join(", ");return {sql:`${o} (${l})`,bindings:a}}},hm=new ts;var rs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},gm=new rs;var os=class{toSql(t){return {sql:"",bindings:[]}}},bm=new os;var ns=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("oracledb",o)).join(", ")})`,bindings:[]}}},Tm=new ns;var ss=class{toSql(t){let e=t;return {sql:`${new f(this.model).formatStringTable("oracledb",e.table)} cascade constraints`,bindings:[]}}},Nm=new ss;var is=class{toSql(t){return {sql:`-- Oracle does not support extensions (extension: ${t.extensionName})`,bindings:[]}}},wm=new is;var as=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("oracledb",e.table)} "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("oracledb",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"oracledb").parse(r),s=e.alias&&e.alias.length?` "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},qm=new as;var ls=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("oracledb",e.column),bindings:[]}}},Sm=new ls;var ds=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 f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Mm=new ds;var ms=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("oracledb",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},_m=new ms;var us=class{toSql(t){return {sql:`"${t.indexName}"`,bindings:[]}}},Cm=new us;var cs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("oracledb",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h of p)h instanceof _?y.push(h.rawValue):(l.push(h),y.push(`:${m++}`));d.push(`(${y.join(", ")})`);}let u;if(e.records.length===1)u=`${o} (${a}) values ${d[0]}`;else {e.keyword="insert",m=e.currParamIndex;let c=[];for(let p of e.records){let y=s.map(N=>p[N]),h=[];for(let N of y)N instanceof _?h.push(N.rawValue):h.push(`:${m++}`);c.push(`into ${o} (${a}) values (${h.join(", ")})`);}u=`all ${c.join(" ")} select * from dual`;}return {sql:u,bindings:l}}},Rm=new cs;var ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("oracledb",o),a=r.formatStringColumn("oracledb",n);return {sql:`${r.formatStringTable("oracledb",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},Am=new ps;var fs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.limit]}}},xm=new fs;var Jp={for_update:"for update",for_share:"for update",for_no_key_update:"for update",for_key_share:"for update"},ys=class{toSql(t){let e=t,r=Jp[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},Pm=new ys;var hs=class{toSql(t){let e=t;return {sql:`:${e.currParamIndex}`,bindings:[e.offset]}}},Dm=new hs;var gs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("oracledb",a)).join(" AND ");if(e.mode==="ignore")return {sql:`on (${o})`,bindings:[]};let n=e.columnsToUpdate.map(a=>`target.${r.formatStringColumn("oracledb",a)} = source.${r.formatStringColumn("oracledb",a)}`).join(", ");return {sql:`on (${o}) when matched then update set ${n}`,bindings:[]}}},Im=new gs;var bs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("oracledb",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},$m=new bs;var Ts=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Om=new Ts;var Ns=class{toSql(t){return {sql:`SELECT
191
- c.constraint_name as name,
192
- cc.column_name as column_name,
193
- rc.table_name as referenced_table,
194
- rcc.column_name as referenced_column,
195
- c.delete_rule as on_delete
196
- FROM user_constraints c
197
- JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
198
- JOIN user_constraints rc ON c.r_constraint_name = rc.constraint_name
199
- JOIN user_cons_columns rcc ON rc.constraint_name = rcc.constraint_name AND cc.position = rcc.position
200
- WHERE c.constraint_type = 'R'
201
- AND c.table_name = '${t.table.toUpperCase()}'
202
- ORDER BY cc.position`,bindings:[]}}},vm=new Ns;var ws=class{toSql(t){return {sql:`SELECT
203
- i.index_name as index_name,
204
- ic.column_name as column_name,
205
- CASE WHEN i.uniqueness = 'UNIQUE' THEN 1 ELSE 0 END as is_unique
206
- FROM user_indexes i
207
- JOIN user_ind_columns ic ON i.index_name = ic.index_name
208
- WHERE i.table_name = '${t.table.toUpperCase()}'
209
- AND i.index_name NOT LIKE 'SYS_%'
210
- AND NOT EXISTS (
211
- SELECT 1 FROM user_constraints c
212
- WHERE c.constraint_type = 'P'
213
- AND c.index_name = i.index_name
214
- )
215
- ORDER BY i.index_name, ic.column_position`,bindings:[]}}},Em=new ws;var qs=class{toSql(t){return {sql:`SELECT
216
- c.constraint_name as name,
217
- cc.column_name as column_name
218
- FROM user_constraints c
219
- JOIN user_cons_columns cc ON c.constraint_name = cc.constraint_name
220
- WHERE c.constraint_type = 'P'
221
- AND c.table_name = '${t.table.toUpperCase()}'
222
- ORDER BY cc.position`,bindings:[]}}},Qm=new qs;var Ss=class{toSql(t){return {sql:`SELECT
223
- column_name,
224
- data_type,
225
- CASE WHEN nullable = 'Y' THEN 'YES' ELSE 'NO' END as is_nullable,
226
- data_default as column_default,
227
- char_length as char_length,
228
- data_precision as numeric_precision,
229
- data_scale as numeric_scale
230
- FROM user_tab_columns
231
- WHERE table_name = '${t.table.toUpperCase()}'
232
- ORDER BY column_id`,bindings:[]}}},km=new Ss;var Ms=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("oracledb",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"oracledb").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"oracledb").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new f(this.model).formatStringColumn("oracledb",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"oracledb").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Bm=new Ms;var _s=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("oracledb",e.fromNode),bindings:[]}}},Km=new _s;var Cs=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Lm=new Cs;var Rs=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("oracledb",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=e.currParamIndex,s=[],a=e.columns.map((l,d)=>{let m=e.values[d];return m instanceof _?`${r.formatStringColumn("oracledb",l)} = ${m.rawValue}`:(s.push(m),`${r.formatStringColumn("oracledb",l)} = :${n++}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}},Um=new Rs;var As=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`:${r} AND :${r+1}`;o=`${new f(this.model).formatStringColumn("oracledb",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`:${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(this.model).formatStringColumn("oracledb",e.column)} ${e.operator} :${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("oracledb",t):t}},Fm=new As;var xs=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"oracledb"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Wm=new xs;var Ps=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(this.model).formatStringColumn("oracledb",e.column);switch(e.jsonOperator){case "=":r=`JSON_EQUAL(${n}, ?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "not contains":r=`NOT JSON_EXISTS(${n}, '$?(@ == $val)' PASSING ? AS "val")`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},jm=new Ps;var Ds=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"oracledb"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new b(this.model,"oracledb"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Vm=new Ds;var Is=class{toSql(t){let e=t,r=new b(this.model,"oracledb"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" /*+ MATERIALIZE */":"";return {sql:`${e.alias} as (${s}${n.sql})`,bindings:n.bindings}}},Hm=new Is;var $s=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Jm=new $s;var Os=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:o}=r.parse([e.constraint]);return {sql:`add ${o}`,bindings:[]}}},Ym=new Os;var vs=class{toSql(t){return {sql:`add primary key (${t.columns.map(o=>`"${o}"`).join(", ")})`,bindings:[]}}},Gm=new vs;var Es=class{toSql(t){let e=t,r=new b(this.model,"postgres"),{sql:o}=r.parse([e.newType]),[,...n]=o.trim().split(/\s+/),s=n.join(" "),a=`alter column "${e.column}" type ${s}`;if(e.options.nullable!==void 0){let l=e.options.nullable?`alter column "${e.column}" drop not null`:`alter column "${e.column}" set not null`;a+=`, ${l}`;}if(e.options.dropDefault)a+=`, alter column "${e.column}" drop default`;else if(e.options.default!==void 0){let l=e.options.default;l===null?l="null":typeof l=="string"&&(l==="NULL"?l="null":l==="TRUE"||l==="FALSE"?l=l.toLowerCase():l=`'${l}'`),a+=`, alter column "${e.column}" set default ${l}`;}return e.options.unique!==void 0&&(e.options.unique?a+=`, add constraint "unique_${e.column}" unique ("${e.column}")`:a+=`, drop constraint "unique_${e.column}"`),{sql:a,bindings:[]}}},zm=new Es;var Qs=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);s.push(c.trim()),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifExists?"if exists ":""}${o} ${l}`,bindings:a}}},Zm=new Qs;var ks=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Xm=new ks;var Bs=class{toSql(t){return {sql:`drop constraint "${t.constraintName}"`,bindings:[]}}},eu=new Bs;var Ks=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},tu=new Ks;var Ls=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},ru=new Ls;var Us=class{toSql(t){return {sql:"",bindings:[]}}},ou=new Us;var Fs=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},nu=new Fs;var Ws=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},su=new Ws;var js=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:[]}}},iu=new js;var Vs=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},au=new Vs;var Hs=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("postgres",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"){let s=e.length??1;return {sql:`${o} char(${s})`,bindings:[]}}else if(n==="varchar"){let s=e.length??255;return {sql:`${o} varchar(${s})`,bindings:[]}}else {if(n==="text"||n==="longtext"||n==="mediumtext"||n==="tinytext")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} uuid`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n==="bigint")return e.autoIncrement?{sql:`${o} bigserial`,bindings:[]}:{sql:`${o} bigint`,bindings:[]};if(n==="tinyint")return {sql:`${o} smallint`,bindings:[]};if(n==="smallint")return {sql:`${o} smallint`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="real")return {sql:`${o} real`,bindings:[]};if(n==="double")return {sql:`${o} double precision`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}else {if(n==="date")return {sql:`${o} date`,bindings:[]};if(n==="year")return {sql:`${o} smallint`,bindings:[]};if(n==="time"){let s=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} time${s}`,bindings:[]}}else if(n==="datetime"||n==="timestamp"){let s=e.withTimezone?" with time zone":" without time zone",a=typeof e.precision=="number"?`(${e.precision})`:"";return {sql:`${o} timestamp${a}${s}`.trimEnd(),bindings:[]}}else {if(n==="boolean"||n==="bool")return {sql:`${o} boolean`,bindings:[]};if(n==="bytea"||n==="binary"||n==="varbinary"||n==="blob"||n==="longblob"||n==="mediumblob"||n==="tinyblob")return {sql:`${o} bytea`,bindings:[]};if(n==="json")return {sql:`${o} json`,bindings:[]};if(n==="jsonb")return {sql:`${o} jsonb`,bindings:[]};if(n==="enum"){if(e.enumValues&&e.enumValues.length>0){let s=e.enumValues.map(a=>`'${a}'`).join(", ");return {sql:`${o} text check (${o} in (${s}))`,bindings:[]}}return {sql:`${o} text`,bindings:[]}}else {if(n==="integer"||n==="int")return e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]};if(n==="geometry")return {sql:`${o} geometry`,bindings:[]};if(n==="point")return {sql:`${o} point`,bindings:[]};if(n==="linestring")return {sql:`${o} linestring`,bindings:[]};if(n==="polygon")return {sql:`${o} polygon`,bindings:[]};if(n==="multipoint")return {sql:`${o} multipoint`,bindings:[]}}}}}return {sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},lu=new Hs;var Js=class{toSql(t){return {sql:"",bindings:[]}}},du=new Js;var Ys=class{toSql(t){let e=t,r=new f(this.model);if(e.constraintType==="primary_key"){if(e.columns&&e.columns.length){let o=e.constraintName?`constraint "${e.constraintName}" `:"",n=(e.columns??[]).map(s=>r.formatStringColumn("postgres",q(s))).join(", ");return {sql:`${o}primary key (${n})`,bindings:[]}}return {sql:"primary key",bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length>0){let o=e.columns??[],n=e.constraintName?`constraint "${e.constraintName}" `:"",s=o.map(a=>r.formatStringColumn("postgres",q(a))).join(", ");return e.constraintName?{sql:`${n}unique (${s})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){if(e.defaultValue!==void 0){let o=e.defaultValue;return o instanceof _?{sql:`default ${o.rawValue}`,bindings:[]}:o==="NULL"||o===null?{sql:"default null",bindings:[]}:o==="TRUE"||o==="FALSE"?{sql:`default ${o.toLowerCase()}`,bindings:[]}:typeof o=="string"?{sql:`default '${o}'`,bindings:[]}:{sql:`default ${o}`,bindings:[]}}return {sql:"default null",bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.columns||!e.columns.length)return {sql:"",bindings:[]};let o=e.columns.map(d=>r.formatStringColumn("postgres",q(d))).join(", ");if(!e.references)return {sql:"",bindings:[]};let n=r.formatStringTable("postgres",e.references.table),s=e.references.columns.map(d=>r.formatStringColumn("postgres",q(d))).join(", "),l=`${e.constraintName?`constraint "${e.constraintName}" `:""}foreign key (${o}) references ${n}(${s})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},mu=new Ys;var Gs=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"postgres"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)){let N=`${y} ${h}`.trim();N=N.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},uu=new Gs;var zs=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},cu=new zs;var Zs=class{toSql(t){return {sql:"",bindings:[]}}},pu=new Zs;var Xs=class{toSql(t){return {sql:`(${t.columns.map(o=>new f(this.model).formatStringColumn("postgres",o)).join(", ")})`,bindings:[]}}},fu=new Xs;var ei=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},yu=new ei;var ti=class{toSql(t){let e=t;return {sql:`${e.ifNotExists?"if not exists ":""}"${e.extensionName}"`,bindings:[]}}},hu=new ti;var ri=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("postgres",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("postgres",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"postgres").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},gu=new ri;var oi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("postgres",e.column),bindings:[]}}},bu=new oi;var ni=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value};let r=e.currParamIndex,o="",n=[];if(!(e.value instanceof w)&&!Array.isArray(e.value)&&(o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},Tu=new ni;var si=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("postgres",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},Nu=new si;var ii=class{toSql(t){let e=t;return {sql:`"${e.indexName}" ${e.cascade?"cascade":""}`,bindings:[]}}},wu=new ii;var ai=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(c=>r.formatStringColumn("postgres",c)).join(", "),l=[],d=[],m=e.currParamIndex;for(let c of e.records){let p=s.map(h=>c[h]),y=[];for(let h=0;h<s.length;h++){let N=p[h];N instanceof _?y.push(N.rawValue):(l.push(N),y.push(`$${m++}${this.formatTypeCast(N)}`));}d.push(`(${y.join(", ")})`);}let u=`${o} (${a}) values ${d.join(", ")}`;if(!e.disableReturning)if(e.returning&&e.returning.length){let c=e.returning.map(p=>r.formatStringColumn("postgres",p)).join(", ");u+=` returning ${c}`;}else u+=" returning *";return {sql:u,bindings:l}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},qu=new ai;var li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("postgres",o),a=r.formatStringColumn("postgres",n);return {sql:`${r.formatStringTable("postgres",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},Su=new li;var di=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.limit]}}},Mu=new di;var Yp={for_update:"for update",for_share:"for share",for_no_key_update:"for no key update",for_key_share:"for key share"},mi=class{toSql(t){let e=t,r=Yp[e.lockType]||"for update";return e.skipLocked&&(r+=" skip locked"),e.noWait&&(r+=" nowait"),{sql:r,bindings:[]}}},_u=new mi;var ui=class{toSql(t){let e=t;return {sql:`$${e.currParamIndex}`,bindings:[e.offset]}}},Cu=new ui;var ci=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.conflictColumns.map(a=>r.formatStringColumn("postgres",a)).join(", ");if(e.mode==="ignore")return {sql:`on conflict (${o}) do nothing`,bindings:[]};let n=e.columnsToUpdate.map(a=>`${r.formatStringColumn("postgres",a)} = excluded.${r.formatStringColumn("postgres",a)}`).join(", "),s=`on conflict (${o}) do update set ${n}`;if(e.returning&&e.returning.length){let a=e.returning.map(l=>r.formatStringColumn("postgres",l)).join(", ");s+=` returning ${a}`;}else s+=" returning *";return {sql:s,bindings:[]}}},Ru=new ci;var pi=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("postgres",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},Au=new pi;var fi=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},xu=new fi;var yi=class{toSql(t){return {sql:`SELECT
233
- tc.constraint_name as name,
234
- kcu.column_name as column_name,
235
- ccu.table_name as referenced_table,
236
- ccu.column_name as referenced_column,
237
- rc.update_rule as on_update,
238
- rc.delete_rule as on_delete
239
- FROM information_schema.table_constraints tc
240
- JOIN information_schema.key_column_usage kcu
241
- ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
242
- JOIN information_schema.constraint_column_usage ccu
243
- ON ccu.constraint_name = tc.constraint_name AND ccu.table_schema = tc.table_schema
244
- JOIN information_schema.referential_constraints rc
245
- ON rc.constraint_name = tc.constraint_name AND rc.constraint_schema = tc.table_schema
246
- WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
247
- ORDER BY kcu.ordinal_position`,bindings:[]}}},Pu=new yi;var hi=class{toSql(t){return {sql:`SELECT
248
- i.relname as index_name,
249
- a.attname as column_name,
250
- ix.indisunique as is_unique
251
- FROM
252
- pg_class t,
253
- pg_class i,
254
- pg_index ix,
255
- pg_attribute a,
256
- pg_namespace n
257
- WHERE
258
- t.oid = ix.indrelid
259
- AND i.oid = ix.indexrelid
260
- AND a.attrelid = t.oid
261
- AND a.attnum = ANY(ix.indkey)
262
- AND t.relkind = 'r'
263
- AND t.relname = '${t.table}'
264
- AND t.relnamespace = n.oid
265
- AND n.nspname = current_schema()
266
- AND i.relname NOT LIKE 'pk_%'`,bindings:[]}}},Du=new hi;var gi=class{toSql(t){return {sql:`SELECT
267
- tc.constraint_name as name,
268
- kcu.column_name as column_name
269
- FROM information_schema.table_constraints tc
270
- JOIN information_schema.key_column_usage kcu
271
- ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
272
- WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema = current_schema() AND tc.table_name = '${t.table}'
273
- ORDER BY kcu.ordinal_position`,bindings:[]}}},Iu=new gi;var bi=class{toSql(t){return {sql:`SELECT column_name,
274
- data_type,
275
- is_nullable,
276
- column_default,
277
- character_maximum_length AS char_length,
278
- numeric_precision AS numeric_precision,
279
- numeric_scale AS numeric_scale
280
- FROM information_schema.columns
281
- WHERE table_schema = current_schema()
282
- AND table_name = '${t.table}'
283
- ORDER BY ordinal_position`,bindings:[]}}},$u=new bi;var Ti=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("postgres",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"postgres").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"postgres").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new f(this.model).formatStringColumn("postgres",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"postgres").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Ou=new Ti;var Ni=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode=="string"?{sql:e.fromNode,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("postgres",e.fromNode),bindings:[]}}},vu=new Ni;var wi=class{toSql(t){let e=t,r=new b(this.model,"postgres"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Eu=new wi;var qi=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("postgres",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=0,s=[],a=e.columns.map((l,d)=>{let m=e.currParamIndex+d-n,u=e.values[d];return u instanceof _?(n++,`${r.formatStringColumn("postgres",l)} = ${u.rawValue}`):(s.push(u),`${r.formatStringColumn("postgres",l)} = $${m}${this.formatTypeCast(u)}`)}).join(", ");return {sql:`${o} set ${a}`,bindings:s}}formatTypeCast(t){let e="";return Buffer.isBuffer(t)?e="::bytea":Array.isArray(t)?e="::array":typeof t=="object"&&t!==null&&!(t instanceof Date)?e="::jsonb":typeof t=="boolean"?e="::boolean":typeof t=="bigint"&&(e="::bigint"),e}},Qu=new qi;var Si=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r=e.currParamIndex,o="",n=[];if(this.isRawNode(e.value)){let s=this.formatRawIdentifierIfPossible(e.value.rawValue);o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} ${s}`,n=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between"){let s=`$${r} AND $${r+1}`;o=`${new f(this.model).formatStringColumn("postgres",e.column)} between ${s}`,n=e.value;}else {let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} (${s})`,n=e.value;}else if(e.operator.includes("null"))o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator}`,n=[];else {if(e.value===void 0)return {sql:"",bindings:[]};o=`${new f(this.model).formatStringColumn("postgres",e.column)} ${e.operator} $${r}`,n=[e.value];}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("postgres",t):t}},ku=new Si;var Mi=class{toSql(t){let e=t;if(!e.nodes||!e.nodes.length)return {sql:"",bindings:[]};let r=new b(this.model,"postgres"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},Bu=new Mi;var _i=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=e.currParamIndex,o="",n=[],s=new f(this.model).formatStringColumn("postgres",e.column);switch(e.jsonOperator){case "=":o=`${s} = $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "not contains":o=`${s} @> $${r}::jsonb`,n=[JSON.stringify(e.value)];break;case "raw":o=e.column,n=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(o=`NOT (${o})`),{sql:o.trim(),bindings:n}}},Ku=new _i;var Ci=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new b(this.model,"postgres"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},Lu=new Ci;var Ri=class{toSql(t){let e=t,r=new b(this.model,"postgres"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex),s=e.clause==="materialized"?" materialized":"";return {sql:`${e.alias} as${s} (${n.sql})`,bindings:n.bindings}}},Uu=new Ri;var Ai=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),{sql:o}=r.parse([e.column]),n=e.inlineConstraints;if(n&&n.length>0){let s=[];for(let a of n){let{sql:l}=r.parse([a]);s.push(l);}s.length>0&&(o+=` ${s.join(" ")}`);}return {sql:`add column ${o}`,bindings:[]}}},Fu=new Ai;var xi=class{toSql(t){return {sql:"",bindings:[]}}},Wu=new xi;var Pi=class{toSql(t){return {sql:"",bindings:[]}}},ju=new Pi;var Di=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:"",bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[],l=false;for(let c of e.children){let{sql:p,bindings:y}=n.parse([c]);if(!(!p||!p.trim())){if(c.file==="add_column")s.push(p),l=true;else if(c.file==="add_constraint"&&l){let h=s.pop()??"",N=p.replace(/^\s*add\s+/i,"").trimStart();s.push(`${h} ${N}`);}else {if(c.file==="set_not_null"||c.file==="drop_not_null")continue;if(c.file==="set_default"||c.file==="drop_default")continue;s.push(p),l=false;}a.push(...y);}}let d=s.join(", "),m=e.ifExists?"if exists ":"";return d.trim()?{sql:`${m}${o} ${d}`,bindings:a}:{sql:"",bindings:[]}}},Vu=new Di;var Ii=class{toSql(t){return {sql:`drop column "${t.column}"`,bindings:[]}}},Hu=new Ii;var $i=class{toSql(t){return {sql:"",bindings:[]}}},Ju=new $i;var Oi=class{toSql(t){return {sql:`alter column "${t.column}" drop default`,bindings:[]}}},Yu=new Oi;var vi=class{toSql(t){return {sql:`alter column "${t.column}" drop not null`,bindings:[]}}},Gu=new vi;var Ei=class{toSql(t){return {sql:"",bindings:[]}}},zu=new Ei;var Qi=class{toSql(t){let e=t;return {sql:`rename column "${e.oldName}" to "${e.newName}"`,bindings:[]}}},Zu=new Qi;var ki=class{toSql(t){return {sql:`"${t.newName}"`,bindings:[]}}},Xu=new ki;var Bi=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:[]}}},ec=new Bi;var Ki=class{toSql(t){return {sql:`alter column "${t.column}" set not null`,bindings:[]}}},tc=new Ki;var Li=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let o=new f(this.model).formatStringColumn("sqlite",q(e.column)),n=e.dataType.toLowerCase();if(n==="char"||n==="varchar")return {sql:`${o} text`,bindings:[]};if(n==="uuid")return {sql:`${o} varchar(36)`,bindings:[]};if(n==="ulid")return {sql:`${o} varchar(26)`,bindings:[]};if(n.includes("text"))return {sql:`${o} text`,bindings:[]};if(n==="integer"||n==="bigint"||n==="int")return {sql:`${o} integer`,bindings:[]};if(n==="tinyint")return {sql:`${o} integer`,bindings:[]};if(n==="smallint")return {sql:`${o} integer`,bindings:[]};if(n==="mediumint")return {sql:`${o} integer`,bindings:[]};if(n==="float"||n==="double")return {sql:`${o} real`,bindings:[]};if(n==="decimal"||n==="numeric"){let s=e.precision??10,a=e.scale??0;return {sql:`${o} numeric(${s}, ${a})`,bindings:[]}}return n==="date"||n==="datetime"||n==="timestamp"||n==="time"||n==="year"?{sql:`${o} text`,bindings:[]}:n==="boolean"?{sql:`${o} integer`,bindings:[]}:n==="json"||n==="jsonb"?{sql:`${o} text`,bindings:[]}:n==="enum"?{sql:`${o} text`,bindings:[]}:n==="bytea"||n==="blob"||n==="binary"||n==="longblob"||n==="mediumblob"||n==="tinyblob"?{sql:`${o} blob`,bindings:[]}:n==="integer"||n==="int"?e.autoIncrement?{sql:`${o} serial`,bindings:[]}:{sql:`${o} integer`,bindings:[]}:n==="geometry"||n==="point"||n==="linestring"||n==="polygon"||n==="multipoint"?{sql:`${o} ${n}`,bindings:[]}:{sql:`${o} ${n} ${e.length?`(${e.length})`:""}`,bindings:[]}}},rc=new Li;var Ui=class{toSql(t){return {sql:"",bindings:[]}}},oc=new Ui;var Fi=class{toSql(t){let e=t,r=new f(this.model),o=e.constraintName?`constraint "${e.constraintName}" `:"";if(e.constraintType==="primary_key"){let n=!!e.autoIncrement,s=(e.columnType||"").toLowerCase();return n&&(s==="integer"||s==="bigint")?{sql:`${o}primary key autoincrement`,bindings:[]}:{sql:`${o}primary key`,bindings:[]}}if(e.constraintType==="unique"){if(e.columns&&e.columns.length){let n=e.columns.map(s=>r.formatStringColumn("sqlite",q(s))).join(", ");return e.constraintName?{sql:`${o}unique (${n})`,bindings:[]}:{sql:"unique",bindings:[]}}return {sql:"unique",bindings:[]}}if(e.constraintType==="not_null")return {sql:"not null",bindings:[]};if(e.constraintType==="null")return {sql:"null",bindings:[]};if(e.constraintType==="default"){let n=e.defaultValue;return n instanceof _?{sql:`default ${n.rawValue}`,bindings:[]}:n==="NULL"||n===null?{sql:"default null",bindings:[]}:n==="TRUE"||n==="FALSE"?{sql:`default ${n.toLowerCase()}`,bindings:[]}:typeof n=="string"?{sql:`default '${n}'`,bindings:[]}:{sql:`default ${n}`,bindings:[]}}if(e.constraintType==="foreign_key"){if(!e.references)return {sql:"",bindings:[]};let n=(e.columns??[]).map(d=>r.formatStringColumn("sqlite",q(d))).join(", "),s=r.formatStringTable("sqlite",e.references.table),a=e.references.columns.map(d=>r.formatStringColumn("sqlite",q(d))).join(", "),l=`${o}foreign key (${n}) references ${s}(${a})`;return e.onDelete&&(l+=` on delete ${e.onDelete}`),e.onUpdate&&(l+=` on update ${e.onUpdate}`),{sql:l,bindings:[]}}return {sql:"",bindings:[]}}},nc=new Fi;var Wi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);if(!e.children||!e.children.length)return {sql:`${o} ()`,bindings:[]};let n=new b(this.model,"sqlite"),s=[],a=[];for(let u of e.children){let{sql:c,bindings:p}=n.parse([u]);if(u.folder==="constraint"){let y=s.pop()??"",h=c;if(/not null/i.test(h)||/null/i.test(h)||/default/i.test(h)||/primary key/i.test(h)){let N=`${y} ${h}`.trim();N=N.replace(/(references\s+"[^"]+"\s*\([^)]*\))\s+not null/i,"not null $1"),s.push(N),a.push(...p);continue}s.push(y),s.push(h),a.push(...p);continue}s.push(c),a.push(...p);}for(let u of e.namedConstraints){let{sql:c,bindings:p}=n.parse([u]);s.push(c),a.push(...p);}let l=s.join(", ");return {sql:`${e.ifNotExists?"if not exists ":""}${o} (${l})`,bindings:a}}},sc=new Wi;var ji=class{toSql(t){let e=t;return e.isRawValue&&typeof e.fromNode.table=="string"?{sql:e.fromNode.table,bindings:[]}:{sql:new f(this.model).getFromForWriteOperations("sqlite",e.fromNode),bindings:[]}}},ic=new ji;var Vi=class{toSql(t){return {sql:"distinct",bindings:[]}}},ac=new Vi;var Hi=class{toSql(t){return g.warn("SQLite does not support DISTINCT ON"),{sql:"",bindings:[]}}},lc=new Hi;var Ji=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table);return {sql:`${e.ifExists?"if exists ":""}${o}`,bindings:[]}}},dc=new Ji;var Yi=class{toSql(t){return {sql:`-- SQLite extensions are loaded dynamically, not created (extension: ${t.extensionName})`,bindings:[]}}},mc=new Yi;var Gi=class{toSql(t){let e=t;if(typeof e.table=="string"){let a=new f(this.model);return e.alias&&e.alias.length>0?{sql:`${a.formatStringTable("sqlite",e.table)} as "${e.alias}"`,bindings:[]}:{sql:a.formatStringTable("sqlite",e.table),bindings:[]}}let r=Array.isArray(e.table)?e.table:[e.table],n=new b(this.model,"sqlite").parse(r),s=e.alias&&e.alias.length?` as "${e.alias}"`:"";return {sql:`(${n.sql})${s}`,bindings:n.bindings}}},uc=new Gi;var zi=class{toSql(t){let e=t;return e.isRawValue?{sql:e.column,bindings:[]}:{sql:new f(this.model).formatStringColumn("sqlite",e.column),bindings:[]}}},cc=new zi;var Zi=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 f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} $${r}`,n=[e.value]),Array.isArray(e.value)){let s=e.value.map((a,l)=>`$${r+l}`).join(", ");o=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${s})`,n=e.value;}return e.isNegated&&(o=`not (${o})`),{sql:o.trim(),bindings:n}}},pc=new Zi;var Xi=class{toSql(t){let e=t,o=new f(this.model).formatStringTable("sqlite",e.table),n=e.columns.map(a=>`"${a}"`).join(", ");return {sql:`${e.unique?"unique ":""}"${e.indexName}" on ${o} (${n})`,bindings:[]}}},fc=new Xi;var ea=class{toSql(t){return {sql:` "${t.indexName}"`,bindings:[]}}},yc=new ea;var ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.fromNode.table,bindings:[]};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.records.length)return {sql:o,bindings:[]};let n=e.records[0],s=Object.keys(n);if(!s.length)return {sql:o,bindings:[]};let a=s.map(u=>r.formatStringColumn("sqlite",u)).join(", "),l=[],d=[];for(let u of e.records){let c=s.map(y=>u[y]),p=[];for(let y of c)y instanceof _?p.push(y.rawValue):(l.push(y),p.push("?"));d.push(`(${p.join(", ")})`);}return {sql:`${o} (${a}) VALUES ${d.join(", ")}`,bindings:l}}},hc=new ta;var ra=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.left;o.includes(".")||(o=`${e.table}.${o}`);let n=e.right;n.includes(".")||(n=`${this.model.table}.${n}`);let s=r.formatStringColumn("sqlite",o),a=r.formatStringColumn("sqlite",n);return {sql:`${r.formatStringTable("sqlite",e.table)} on ${s} ${e.on?.operator} ${a}`,bindings:[]}}},gc=new ra;var oa=class{toSql(t){return {sql:"?",bindings:[t.limit]}}},bc=new oa;var na=class{toSql(t){return {sql:"",bindings:[]}}},Tc=new na;var sa=class{toSql(t){return {sql:"?",bindings:[t.offset]}}},Nc=new sa;var ia=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.table,bindings:[]};let r=new f(this.model),o=e.conflictColumns.map(s=>r.formatStringColumn("sqlite",s)).join(", ");if(e.mode==="ignore")return {sql:`ON CONFLICT (${o}) DO NOTHING`,bindings:[]};let n=e.columnsToUpdate.map(s=>`${r.formatStringColumn("sqlite",s)} = EXCLUDED.${r.formatStringColumn("sqlite",s)}`).join(", ");return {sql:`ON CONFLICT (${o}) DO UPDATE SET ${n}`,bindings:[]}}},wc=new ia;var aa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=new f(this.model).formatStringColumn("sqlite",e.column),o=e.direction.toLowerCase();return {sql:`${r} ${o}`,bindings:[]}}},qc=new aa;var la=class{toSql(t){return {sql:t.rawValue,bindings:[]}}},Sc=new la;var da=class{toSql(t){return {sql:`PRAGMA foreign_key_list(${t.table})`,bindings:[]}}},Mc=new da;var ma=class{toSql(t){return {sql:`PRAGMA index_list(${t.table})`,bindings:[]}}},_c=new ma;var ua=class{toSql(t){return {sql:`SELECT
284
- 'PRIMARY' as name,
285
- name as column_name
286
- FROM pragma_table_info('${t.table}')
287
- WHERE pk > 0
288
- ORDER BY pk`,bindings:[]}}},Cc=new ua;var ca=class{toSql(t){return {sql:`PRAGMA table_info(${t.table})`,bindings:[]}}},Rc=new ca;var pa=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r=this.formatColumn(e.column,e.sqlFunction),o=this.formatAlias(e.alias);return {sql:`${r.sql}${o}`,bindings:r.bindings}}formatColumn(t,e){if(typeof t=="string"){let o=new f(this.model).formatStringColumn("sqlite",t),n=o;return e&&(n=`${e.toLowerCase()}(${o})`),{sql:n,bindings:[]}}if(Array.isArray(t)&&t.length>0){let n=new b(this.model,"sqlite").parse(t),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}if(!Array.isArray(t)){let n=new b(this.model,"sqlite").parse([t]),s=`(${n.sql})`;return e&&(s=`${e.toLowerCase()}${s}`),{sql:s,bindings:n.bindings}}return {sql:t.map(o=>{if(typeof o=="string"){let l=new f(this.model).formatStringColumn("sqlite",o);return e?`${e.toLowerCase()}(${l})`:l}let a=`(${new b(this.model,"sqlite").parse([o]).sql})`;return e&&(a=`${e.toLowerCase()}${a}`),a}).join(", "),bindings:[]}}formatAlias(t){return t&&t.length>0?` as "${t}"`:""}},Ac=new pa;var fa=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return e.keyword="",{sql:e.fromNode,bindings:[]};let r=new f(this.model).getFromForWriteOperations("sqlite",e.fromNode);return e.keyword="DELETE FROM",{sql:r,bindings:[]}}},xc=new fa;var ya=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),o=Array.isArray(e.query)?e.query:[e.query],n=typeof e.query=="string"?{sql:e.query,bindings:[]}:r.parse(o.filter(Boolean),e.currParamIndex);return {sql:n.sql,bindings:n.bindings}}},Pc=new ya;var ha=class{toSql(t){let e=t;if(e.isRawValue&&typeof e.fromNode=="string")return {sql:e.fromNode,bindings:e.values};let r=new f(this.model),o=r.getFromForWriteOperations("sqlite",e.fromNode);if(!e.columns.length||!e.values.length)return {sql:o,bindings:[]};let n=[],s=e.columns.map((a,l)=>{let d=e.values[l];return d instanceof _?`${r.formatStringColumn("sqlite",a)} = ${d.rawValue}`:(n.push(d),`${r.formatStringColumn("sqlite",a)} = ?`)}).join(", ");return {sql:`${o} set ${s}`,bindings:n}}},Dc=new ha;var ga=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:e.value??[]};let r="",o=[];if(this.isRawNode(e.value)){let n=this.formatRawIdentifierIfPossible(e.value.rawValue);r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ${n}`,o=[];}else if(Array.isArray(e.value))if(e.operator.toLowerCase()==="between")r=`${new f(this.model).formatStringColumn("sqlite",e.column)} between ? AND ?`,o=e.value;else {let n=e.value.map(s=>"?").join(", ");r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} (${n})`,o=e.value;}else if(e.operator.includes("null"))r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator}`,o=[];else {if(e.value===void 0)return {sql:"",bindings:[]};r=`${new f(this.model).formatStringColumn("sqlite",e.column)} ${e.operator} ?`,o=[e.value];}return e.isNegated&&(r=`not (${r})`),{sql:r.trim(),bindings:o}}isRawNode(t){return t&&typeof t=="object"&&"rawValue"in t&&t.isRawValue===true}formatRawIdentifierIfPossible(t){return /^[A-Za-z_][A-Za-z0-9_]*(\.(\*|[A-Za-z_][A-Za-z0-9_]*))?$/.test(t)?new f(this.model).formatStringColumn("sqlite",t):t}},Ic=new ga;var ba=class{toSql(t){let e=t;if(!e.nodes||e.nodes.length===0)return {sql:"",bindings:[]};let r=new b(this.model,"sqlite"),{sql:o,bindings:n}=r.parse(e.nodes,e.currParamIndex,true);return {sql:`(${o})`,bindings:n}}},$c=new ba;var Ta=class{toSql(t){let e=t;if(e.isRawValue)return {sql:e.column,bindings:[]};let r="",o=[],n=new f(this.model).formatStringColumn("sqlite",e.column);switch(e.jsonOperator){case "=":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "not contains":r=`json(${n}) = json(?)`,o=[JSON.stringify(e.value)];break;case "raw":r=e.column,o=Array.isArray(e.value)?e.value:[];break}return e.isNegated&&(r=`NOT (${r})`),{sql:r.trim(),bindings:o}}},Oc=new Ta;var Na=class{toSql(t){let e=t;return this.isStringSubquery(e.subquery)?this.handleStringSubquery(e):this.isArraySubquery(e.subquery)?this.handleArraySubquery(e):this.handleObjectSubquery(e)}isStringSubquery(t){return typeof t=="string"}isArraySubquery(t){return Array.isArray(t)}handleStringSubquery(t){return {sql:`${t.column} ${t.operator} (${t.subquery})`.trim(),bindings:[]}}handleArraySubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:o}=e.parse(t.subquery,t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}handleObjectSubquery(t){let e=new b(this.model,"sqlite"),{sql:r,bindings:o}=e.parse([t.subquery],t.currParamIndex);return {sql:`${t.column} ${t.operator} (${r})`.trim(),bindings:o}}},vc=new Na;var wa=class{toSql(t){let e=t,r=new b(this.model,"sqlite"),o=Array.isArray(e.body)?e.body:[e.body],n=r.parse(o.filter(Boolean),e.currParamIndex);return {sql:`${e.alias} as (${n.sql})`,bindings:n.bindings}}},Ec=new wa;var Qc={mssql:{alter_table:{add_column:Wa,add_constraint:ja,add_primary_key:Va,alter_column_type:Ha,alter_table:pl,drop_column:fl,drop_constraint:yl,drop_default:hl,drop_not_null:gl,drop_primary_key:bl,rename_column:Tl,rename_table:Nl,set_default:wl,set_not_null:ql},column:{column_type:Sl},constraint:{after:Ml,constraint:_l},create_table:{create_table:Cl},delete:{delete:Rl},distinct:{distinct:Al,distinct_on:xl},drop_table:{drop_table:Pl},extension:{create_extension:Dl},from:{from:Il},group_by:{group_by:$l},having:{having:Ol},index_op:{create_index:vl,drop_index:El},insert:{insert:Ql},join:{join:kl},limit:{limit:Bl},lock:{lock:Kl},offset:{offset:Ll},on_duplicate:{on_duplicate:Ul},order_by:{order_by:Fl},raw:{raw:Wl},schema:{foreign_key_info:jl,index_info:Vl,primary_key_info:Hl,table_info:Jl},select:{select:Yl},truncate:{truncate:Gl},union:{union:zl},update:{update:Zl},where:{where:Xl,where_group:ed,where_json:td,where_subquery:rd},with:{with:od}},mysql:{alter_table:{add_column:nd,add_constraint:sd,add_primary_key:id,alter_column_type:ad,alter_table:ld,drop_column:dd,drop_constraint:md,drop_default:ud,drop_not_null:cd,drop_primary_key:pd,rename_column:fd,rename_table:yd,set_default:hd,set_not_null:gd},column:{column_type:bd},constraint:{after:Td,constraint:Nd},create_table:{create_table:wd},delete:{delete:qd},distinct:{distinct:Sd,distinct_on:Md},drop_table:{drop_table:_d},extension:{create_extension:Cd},from:{from:Rd},group_by:{group_by:Ad},having:{having:xd},index_op:{create_index:Pd,drop_index:Dd},insert:{insert:Id},join:{join:$d},limit:{limit:Od},lock:{lock:vd},offset:{offset:Ed},on_duplicate:{on_duplicate:Qd},order_by:{order_by:kd},raw:{raw:Bd},schema:{foreign_key_info:Kd,index_info:Ld,primary_key_info:Ud,table_info:Fd},select:{select:Wd},truncate:{truncate:jd},union:{union:Vd},update:{update:Hd},where:{where:Jd,where_group:Yd,where_json:Gd,where_subquery:zd},with:{with:Zd}},oracledb:{alter_table:{add_column:Xd,add_constraint:em,add_primary_key:tm,alter_column_type:rm,alter_table:om,drop_column:nm,drop_constraint:sm,drop_default:im,drop_not_null:am,drop_primary_key:lm,rename_column:dm,rename_table:mm,set_default:um,set_not_null:cm},column:{column_type:pm},constraint:{after:fm,constraint:ym},create_table:{create_table:hm},delete:{delete:gm},distinct:{distinct:bm,distinct_on:Tm},drop_table:{drop_table:Nm},extension:{create_extension:wm},from:{from:qm},group_by:{group_by:Sm},having:{having:Mm},index_op:{create_index:_m,drop_index:Cm},insert:{insert:Rm},join:{join:Am},limit:{limit:xm},lock:{lock:Pm},offset:{offset:Dm},on_duplicate:{on_duplicate:Im},order_by:{order_by:$m},raw:{raw:Om},schema:{foreign_key_info:vm,index_info:Em,primary_key_info:Qm,table_info:km},select:{select:Bm},truncate:{truncate:Km},union:{union:Lm},update:{update:Um},where:{where:Fm,where_group:Wm,where_json:jm,where_subquery:Vm},with:{with:Hm}},postgres:{alter_table:{add_column:Jm,add_constraint:Ym,add_primary_key:Gm,alter_column_type:zm,alter_table:Zm,drop_column:Xm,drop_constraint:eu,drop_default:tu,drop_not_null:ru,drop_primary_key:ou,rename_column:nu,rename_table:su,set_default:iu,set_not_null:au},column:{column_type:lu},constraint:{after:du,constraint:mu},create_table:{create_table:uu},delete:{delete:cu},distinct:{distinct:pu,distinct_on:fu},drop_table:{drop_table:yu},extension:{create_extension:hu},from:{from:gu},group_by:{group_by:bu},having:{having:Tu},index_op:{create_index:Nu,drop_index:wu},insert:{insert:qu},join:{join:Su},limit:{limit:Mu},lock:{lock:_u},offset:{offset:Cu},on_duplicate:{on_duplicate:Ru},order_by:{order_by:Au},raw:{raw:xu},schema:{foreign_key_info:Pu,index_info:Du,primary_key_info:Iu,table_info:$u},select:{select:Ou},truncate:{truncate:vu},union:{union:Eu},update:{update:Qu},where:{where:ku,where_group:Bu,where_json:Ku,where_subquery:Lu},with:{with:Uu}},sqlite:{alter_table:{add_column:Fu,add_constraint:Wu,alter_column_type:ju,alter_table:Vu,drop_column:Hu,drop_constraint:Ju,drop_default:Yu,drop_not_null:Gu,drop_primary_key:zu,rename_column:Zu,rename_table:Xu,set_default:ec,set_not_null:tc},column:{column_type:rc},constraint:{after:oc,constraint:nc},create_table:{create_table:sc},delete:{delete:ic},distinct:{distinct:ac,distinct_on:lc},drop_table:{drop_table:dc},extension:{create_extension:mc},from:{from:uc},group_by:{group_by:cc},having:{having:pc},index_op:{create_index:fc,drop_index:yc},insert:{insert:hc},join:{join:gc},limit:{limit:bc},lock:{lock:Tc},offset:{offset:Nc},on_duplicate:{on_duplicate:wc},order_by:{order_by:qc},raw:{raw:Sc},schema:{foreign_key_info:Mc,index_info:_c,primary_key_info:Cc,table_info:Rc},select:{select:Ac},truncate:{truncate:xc},union:{union:Pc},update:{update:Dc},where:{where:Ic,where_group:$c,where_json:Oc,where_subquery:vc},with:{with:Ec}}};var b=class{constructor(t,e){this.dbType=e,this.model=t;}parse(t,e=1,r=false){if(!t.length)return {sql:"",bindings:[]};let o=t.find(C=>!!C&&C.folder==="distinctOn"),n=!o&&t.find(C=>!!C&&C.folder==="distinct"),s=this.dbType==="mssql"?t.find(C=>!!C&&C.folder==="lock")??null:null,a=s?this.getMssqlTableHints(s):"",l=t.filter(C=>C!==null&&C.folder!=="distinct"&&C.folder!=="distinctOn"),d=l.some(C=>C.folder==="offset"),m=l.some(C=>C.folder==="order_by"),u=l.find(C=>C.folder==="limit"),c=l.find(C=>C.folder==="offset"),p=this.dbType==="mssql"&&u&&!d&&!m,y=this.dbType==="mssql"&&!p&&(u||c),h=this.dbType==="oracledb"&&(u||c),N=[],M=[],$=null;p&&u&&M.push(u.limit);for(let C=0;C<l.length;C++){let D=l[C];if(p&&D.folder==="limit"||y&&(D.folder==="limit"||D.folder==="offset")||h&&(D.folder==="limit"||D.folder==="offset"))continue;D.currParamIndex=e+M.length;let A=Qc[this.mapCommonDbType(this.dbType)][D.folder][D.file];if(!A)throw new Error(`Interpreter not found for ${this.dbType} ${D.keyword}`);A.model=this.model;let S=A.toSql(D);if(!S.sql||!S.sql.trim().length)continue;let E=l[C+1],x=!E||E.keyword!==D.keyword?"":E.chainsWith;if(D.folder==="lock"||D.folder==="on_duplicate"||D.folder==="schema"){N.push(`${S.sql}${x}`),M.push(...S.bindings),$=D.keyword;continue}if($!==D.keyword||D.canKeywordBeSeenMultipleTimes){if(r)N.push(`${S.sql}${x}`);else {let G=D.keyword;if(D.folder==="with"&&this.dbType!=="mssql"){let oe=C,Ke=false;for(;oe<l.length&&l[oe].keyword===D.keyword;){let Ce=l[oe];if(Ce.folder==="with"&&Ce.clause==="recursive"){Ke=true;break}oe++;}Ke&&(G=`${G} recursive`);}if(G==="select"){let oe=p?`top (@${e}) `:"";if(o){let Ke=Array.isArray(o.columns)?o.columns.join(", "):"";N.push(`select ${oe}distinct on (${Ke}) ${S.sql}${x}`);}else n?N.push(`select ${oe}distinct ${S.sql}${x}`):N.push(`select ${oe}${S.sql}${x}`);}else G==="from"&&a?N.push(`${G} ${S.sql}${a}${x}`):N.push(`${G} ${S.sql}${x}`);}$=D.keyword;}else N.push(`${S.sql}${x}`);M.push(...S.bindings);}if(y){m||N.push("order by (select null)");let C=c?.offset??0;M.push(C);let A=`offset @${e+M.length-1} rows`;if(u){M.push(u.limit);let S=e+M.length-1;A+=` fetch next @${S} rows only`;}N.push(A);}if(h){m||N.push("order by null");let C=c?.offset??0;M.push(C);let A=`offset :${e+M.length-1} rows`;if(u){M.push(u.limit);let S=e+M.length-1;A+=` fetch next :${S} rows only`;}N.push(A);}return {sql:N.join(" "),bindings:M}}mapCommonDbType(t){switch(t){case "mariadb":return "mysql";case "cockroachdb":return "postgres";default:return t}}getMssqlTableHints(t){let e=[];switch(t.lockType){case "UPDATE":e.push("UPDLOCK");break;case "SHARE":e.push("HOLDLOCK");break;case "NO_KEY_UPDATE":e.push("UPDLOCK");break;case "KEY_SHARE":e.push("HOLDLOCK");break}return t.skipLocked&&e.push("READPAST"),t.noWait&&e.push("NOWAIT"),e.length>0?` with (${e.join(", ")})`:""}};var Wt=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 Vt=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="primary_key_info";this.table=e;}};var Ht=class extends w{constructor(e){super("schema");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="schema";this.file="table_info";this.table=e;}};var Jt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_column";this.column=e;}};var fe=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="add_constraint";this.constraint=e;}};var Ve=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="add_primary_key";this.columns=e;}};var Yt=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 qe=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 Gt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_column";this.column=e;}};var ye=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_constraint";this.constraintName=e;}};var dt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_default";this.column=e;}};var zt=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="drop_not_null";this.column=e;}};var He=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=false;this.folder="alter_table";this.file="drop_primary_key";this.table=e;}};var Zt=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 Xt=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 er=class extends w{constructor(e){super("");this.chainsWith=",";this.canKeywordBeSeenMultipleTimes=true;this.folder="alter_table";this.file="set_not_null";this.column=e;}};var H=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 tr=class extends w{constructor(e,r=[],o=[],n=false){super("create table");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="create_table";this.file="create_table";this.table=e,this.children=r,this.namedConstraints=o,this.ifNotExists=n;}};var rr=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 or=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 nr=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 sr=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 he=class extends w{constructor(e,r=false){super("truncate",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="truncate";this.file="truncate";this.fromNode=e;}};var I=class extends 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.isRawValue=o.isRawValue??false;}};var mt=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 Ee=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 Je=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 De=class{constructor(t){this.nodes=t;}getNodes(){return this.nodes}};var ir=class extends w{constructor(e){super("");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="constraint";this.file="after";this.column=e;}};var ar=class extends De{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,q(this.columnNode.column));return this.context==="alter_table"?(this.nodes.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this):this.sqlType==="sqlite"?this.handleSqliteAutoIncrement(t||{constraintName:e}):(this.namedConstraints.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??e})),this)}foreignKey(t,e){let[r,o]=t.split("."),n=o.split(","),s=e?.constraintName??J(this.tableName??"",q(this.columnNode.column),n[0]);return this.context==="alter_table"?(this.nodes.push(new H("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this):(this.namedConstraints.push(new H("foreign_key",{columns:[q(this.columnNode.column)],references:{table:r,columns:n},constraintName:s,onDelete:e?.onDelete,onUpdate:e?.onUpdate})),this)}increment(){return this.columnNode.autoIncrement=true,this}notNullable(){return this.nodes.push(new H("not_null",{columns:[q(this.columnNode.column)]})),this}nullable(){return this.nodes.push(new H("null",{columns:[q(this.columnNode.column)]})),this}default(t){let e;return t instanceof _?e=t:t===null?e="NULL":typeof t=="boolean"?e=t?"TRUE":"FALSE":t!==void 0&&(e=t.toString()),this.nodes.push(new H("default",{defaultValue:e})),this}unique(t){return this.context==="alter_table"?(this.nodes.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName??ie(this.tableName??"",q(this.columnNode.column))})),this):(this.namedConstraints.push(new H("unique",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName||ie(this.tableName??"",q(this.columnNode.column))})),this)}after(t){return this.nodes.push(new ir(t)),this}handleSqliteAutoIncrement(t){return this.nodes.push(new H("primary_key",{columns:[q(this.columnNode.column)],constraintName:t?.constraintName,autoIncrement:this.columnNode.autoIncrement,columnType:"integer"})),this}};var Qe=class extends De{constructor(e,r,o,n){super(r);this.context="create_table";this.tableName=o,this.namedConstraints=[],this.context=n??"create_table",this.sqlType=e;}build(e){return this.nodes.push(e),new ar(this.sqlType,this.nodes,e,this.tableName,this.namedConstraints,this.context)}rawStatement(e){return new _(e)}char(e,r=1){let o=new I(e,"char",{length:r});return this.build(o)}varchar(e,r=255){let o=new I(e,"varchar",{length:r});return this.build(o)}string(e,r=255){return this.varchar(e,r)}text(e,r="longtext"){let o=new I(e,r);return this.build(o)}longtext(e){return this.text(e,"longtext")}mediumtext(e){return this.text(e,"mediumtext")}tinytext(e){return this.text(e,"tinytext")}uuid(e){let r=new I(e,"uuid");return this.build(r)}ulid(e){let r=new I(e,"ulid");return this.build(r)}integer(e,r=255){let o=new I(e,"integer",{length:r});return this.build(o)}tinyint(e,r=255){let o=new I(e,"tinyint",{length:r});return this.build(o)}smallint(e,r=255){let o=new I(e,"smallint",{length:r});return this.build(o)}mediumint(e,r=255){let o=new I(e,"mediumint",{length:r});return this.build(o)}biginteger(e,r=255){let o=new I(e,"bigint",{length:r});return this.build(o)}bigint(e,r=255){return this.biginteger(e,r)}float(e,r=10){let o=new I(e,"float",{precision:r});return this.build(o)}double(e,r=10){let o=new I(e,"double",{precision:r});return this.build(o)}real(e,r=10){let o=new I(e,"real",{precision:r});return this.build(o)}decimal(e,r=10,o=2){let n=new I(e,"decimal",{precision:r,scale:o});return this.build(n)}numeric(e,r=10,o=2){let n=new I(e,"numeric",{precision:r,scale:o});return this.build(n)}increment(e,r=255){return this.integer(e,r).increment()}bigIncrement(e,r=255){return this.biginteger(e,r).increment()}date(e,r){let o=new I(e,"date",{precision:r});return this.build(o)}time(e,r){let o=new I(e,"time",{precision:r});return this.build(o)}year(e){let r=new I(e,"year");return this.build(r)}datetime(e,r){let o=new I(e,"datetime",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}timestamp(e,r){let o=new I(e,"timestamp",{withTimezone:r?.withTimezone??false,precision:r?.precision});return this.build(o)}boolean(e){let r=new I(e,"boolean");return this.build(r)}binary(e){let r=new I(e,"binary");return this.build(r)}varbinary(e,r=255){let o=new I(e,"varbinary",{length:r});return this.build(o)}blob(e){let r=new I(e,"blob");return this.build(r)}tinyblob(e){let r=new I(e,"tinyblob");return this.build(r)}mediumblob(e){let r=new I(e,"mediumblob");return this.build(r)}longblob(e){let r=new I(e,"longblob");return this.build(r)}json(e){let r=new I(e,"json");return this.build(r)}jsonb(e){let r=new I(e,"jsonb");return this.build(r)}enum(e,r){let o=new I(e,"enum",{enumValues:r});return this.build(o)}custom(e,r,o){let n=new I(e,r,{length:o});return this.build(n)}rawColumn(e){let r=new I(e,"",{isRawValue:true});return this.build(r)}geometry(e){let r=new I(e,"geometry");return this.build(r)}point(e){let r=new I(e,"point");return this.build(r)}linestring(e){let r=new I(e,"linestring");return this.build(r)}polygon(e){let r=new I(e,"polygon");return this.build(r)}multiPoint(e){let r=new I(e,"multiPoint");return this.build(r)}getNamedConstraints(){return this.namedConstraints}};var lr=class extends De{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(u=>u.folder==="column");if(e=e.concat(n),s.length!==1)throw new Error("addColumn callback must define exactly one column");let a=s[0],l=o.getNodes().filter(u=>{let c=u;return c.constraintType==="not_null"||c.constraintType==="null"||c.constraintType==="default"}),d=new Jt(a);d.inlineConstraints=l,this.nodes.push(d),o.getNodes().filter(u=>{let c=u;return c.constraintType==="unique"||c.constraintType==="foreign_key"||c.constraintType==="primary_key"}).forEach(u=>{this.nodes.push(new fe(u));});}alterColumn(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let e=[],r=new 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=q(s.column),l=o.getNodes().find(c=>c.constraintType==="null"),m=o.getNodes().find(c=>c.constraintType==="not_null")||l,u=o.getNodes().find(c=>c.constraintType==="default");this.nodes.push(new Yt(q(a),s,{})),m&&(m.constraintType==="not_null"?this.nodes.push(new er(q(a))):m.constraintType==="null"&&this.nodes.push(new zt(q(a)))),u&&(u.defaultValue===void 0||u.defaultValue===null?this.nodes.push(new dt(q(a))):this.nodes.push(new Xt(q(a),u.defaultValue))),o.getNodes().forEach(c=>{let p=c;switch(p.constraintType){case "primary_key":this.addPrimaryKey(q(a));break;case "unique":this.unique(q(a),{constraintName:p.constraintName});break;case "foreign_key":this.foreignKey(q(a),p.references?.table??"",q(p.references?.columns?.[0]??""),{constraintName:p.constraintName,onDelete:p.onDelete,onUpdate:p.onUpdate});break}});}dropColumn(t){this.nodes.push(new Gt(t));}renameColumn(t,e){this.nodes.push(new Zt(t,e));}dropDefault(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new dt(t));}addPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new Ve([t]));}addConstraint(...t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new fe(new H(...t)));}foreignKey(t,e,r,o){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new fe(new H("foreign_key",{columns:[t],references:{table:e,columns:[r]},constraintName:o?.constraintName??J(this.table,t,r),onDelete:o?.onDelete,onUpdate:o?.onUpdate})));}unique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::alterColumn","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new fe(new H("unique",{columns:[t],constraintName:e?.constraintName??ie(this.table,t)})));}dropForeignKey(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));let r=J(this.table,t,e);this.nodes.push(new ye(r));}dropUnique(t,e){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropUnique","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="cockroachdb")throw new T("AlterTableBuilder::dropUnique","COCKROACHDB_NOT_SUPPORTED",new Error("cockroachdb does not support alter table statements"));let r=e?.constraintName??ie(this.table,t);this.nodes.push(new ye(r));}dropConstraint(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropConstraint","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));this.nodes.push(new ye(t));}dropPrimaryKey(t){if(this.sqlType==="sqlite")throw new T("AlterTableBuilder::dropPrimaryKey","SQLITE_NOT_SUPPORTED",new Error("sqlite does not support alter table statements"));if(this.sqlType==="postgres"&&!t)throw new T("AlterTableBuilder::dropPrimaryKey","POSTGRES_TABLE_REQUIRED",new Error("postgres requires the table name"));this.nodes.push(new He(t));}};var Se=class{constructor(t){if(this.sqlType=t||R.DB_TYPE,!this.sqlType)throw new T("Schema::constructor","ENV_NOT_SET",new Error("env not set, please set DB_TYPE in .env file"));this.queryStatements=[];}rawStatement(t){return new _(t)}rawQuery(t){this.queryStatements.push(t);}runFile(t){if(!de__default.default.existsSync(t))throw new T("Schema::runFile","FILE_NOT_FOUND_OR_NOT_ACCESSIBLE");let e=Be__default.default.basename(t),r=Be__default.default.extname(e);if(r!==".sql"&&r!==".txt")throw new T("Schema::runFile","FILE_NOT_A_SQL_OR_TXT_FILE");let n=de__default.default.readFileSync(t,"utf-8").split(";").map(s=>s.trim()).filter(s=>s.length>0&&!s.startsWith("--"));for(let s of n)this.rawQuery(s);}createTable(t,e,r){let o=new Qe(this.sqlType,[],t);e(o);let n=o.getNodes(),s=new b({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.sqlType),a=new tr(t,n,o.getNamedConstraints(),r?.ifNotExists),l=s.parse([a]).sql,d=l.startsWith("create table")?l:`create table ${l}`;this.rawQuery(d);}alterTable(t,e){let r=[],o=new lr(t,r,this.sqlType);if(e(o),!r.length)return;let n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"}),s=[],a=()=>{if(!s.length)return;let l=new qe(t,s),d=n.parse([l]).sql;if(!d||!d.trim())return;let m=d.startsWith("alter table")?d:`alter table ${d}`;this.rawQuery(m),s=[];};for(let l of r)l.file==="add_constraint"&&s.length&&s[0].file==="add_column"||a(),s.push(l);a();}dropTable(t,e=false){let r=new rr(t,e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}renameTable(t,e){let r=new qe(t,[new We(e)]),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}truncateTable(t){let e=new he(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||Yr(t,e.join("_")),n=new nr(t,e,o),s=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(s.parse([n]).sql);}dropIndex(t,e){let r=new sr(t,e),o=this.generateAstInstance({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}addPrimaryKey(t,e){let r=new Ve(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??ie(t,o.join("_")),s=new H("unique",{columns:o,constraintName:n}),a=new qe(t,[new fe(s)]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropForeignKey(t,e,r){let o=J(t,e,r),n=new ye(o),s=new qe(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)?ie(t,e.join("_")):ie(t,e),n=r?.constraintName??o,s=new ye(n),a=new qe(t,[s]),l=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(l.parse([a]).sql);}dropPrimaryKey(t){let e=new He,r=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(r.parse([e]).sql);}addConstraint(t,...e){let r=new H(...e),o=new qe(t,[new fe(r)]),n=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(n.parse([o]).sql);}dropConstraint(t,e){let r=new ye(e),o=this.generateAstInstance({table:t,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}createExtension(t,e=true){let r=new or(t,e),o=this.generateAstInstance({table:"",databaseCaseConvention:"preserve",modelCaseConvention:"preserve"});this.rawQuery(o.parse([r]).sql);}generateAstInstance(t){return new b(t,this.sqlType)}};var dr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models);}buildDropDependencies(t){let e=new Map,r=new Map,o=new Map;for(let n of t.relationsToDrop||[]){let s=`${n.table}.${n.relation.name}`,a=[];if(n.relation.referencedTable&&a.push(`table.${n.relation.referencedTable}`),n.relation.referencedColumns)for(let l of n.relation.referencedColumns)a.push(`column.${n.relation.referencedTable}.${l}`);e.set(s,a);}for(let n of t.tablesToDrop||[]){let s=`table.${n.table}`,a=[];for(let l of this.models){let d=l.getRelations();for(let m of d)m.type==="belongsTo"&&m.model().table===n.table&&a.push(`fk.${l.table}.${m.constraintName}`);}r.set(s,a);}for(let n of t.columnsToDrop||[]){let s=`column.${n.table}.${n.column}`,a=[],l=this.models.find(d=>d.table===n.table);if(l){let d=l.getColumns().find(m=>m.databaseName===n.column);if(d){d.isPrimary&&a.push(`pk.${n.table}`);let m=l.getRelations();for(let u of m)u.columnName===d.columnName&&a.push(`fk.${n.table}.${u.constraintName}`);}}o.set(s,a);}return {foreignKeys:e,tables:r,constraints:o}}topologicalSortReverse(t,e){let r=new Set,o=new Set,n=[],s=a=>{if(o.has(a))throw new Error(`Circular dependency detected: ${a}`);if(r.has(a))return;o.add(a);let l=e(a);for(let d of l)s(d);o.delete(a),r.add(a),n.push(a);};for(let a of t.keys())r.has(a)||s(a);return n}generateDropOperations(t){let e=this.buildDropDependencies(t),r=[],o=this.topologicalSortReverse(e.foreignKeys,s=>e.foreignKeys.get(s)||[]);for(let s of o){let[a,l]=s.split("."),d=t.relationsToDrop?.find(m=>m.table===a&&m.relation.name===l);d&&r.push({type:"DROP_FOREIGN_KEY",phase:"DESTRUCTIVE_OPERATIONS",table:a,constraint:l,data:d,dependencies:e.foreignKeys.get(s)||[],sqlStatements:this.generateDropForeignKeySql(d)});}let n=this.topologicalSortReverse(e.tables,s=>e.tables.get(s)||[]);for(let s of t.columnsToDrop||[]){let a=`column.${s.table}.${s.column}`,l=e.constraints.get(a)||[];for(let d of l)d.startsWith("pk.")?r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:"PRIMARY KEY",data:{type:"primary_key",table:s.table},dependencies:[a],sqlStatements:this.generateDropPrimaryKeySql(s.table)}):d.startsWith("unique.")&&r.push({type:"DROP_CONSTRAINT",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,constraint:`UNIQUE_${s.column}`,data:{type:"unique",table:s.table,column:s.column},dependencies:[a],sqlStatements:this.generateDropUniqueConstraintSql(s.table,s.column)});}for(let s of t.columnsToDrop||[])r.push({type:"DROP_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:s.table,column:s.column,data:s,dependencies:[],sqlStatements:this.generateDropColumnSql(s)});for(let s of n){let a=s.replace("table.",""),l=t.tablesToDrop?.find(d=>d.table===a);l&&r.push({type:"DROP_TABLE",phase:"DESTRUCTIVE_OPERATIONS",table:a,data:l,dependencies:e.tables.get(s)||[],sqlStatements:this.generateDropTableSql(l)});}return r}analyzeConstraintImpact(t){let e=new Map;for(let r of t.columnsToDrop||[]){let o=[],n=this.models.find(s=>s.table===r.table);if(n){let s=n.getColumns().find(a=>a.databaseName===r.column);if(s){s.isPrimary&&o.push(`PRIMARY KEY on ${r.table}`);let a=n.getRelations();for(let l of a)l.columnName===s.columnName&&o.push(`FOREIGN KEY ${l.constraintName} on ${r.table}`);}}e.set(`${r.table}.${r.column}`,o);}return e}detectMixedOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.models.find(n=>n.table===r.table);o&&o.getColumns().find(s=>s.databaseName===r.dbColumns.name)&&this.hasConstraintChanges(r.dbColumns,r.modelColumn)&&e.push({type:"column_modification_with_constraints",table:r.table,column:r.dbColumns.name,description:`Column ${r.dbColumns.name} modification requires constraint recreation`});}for(let r of t.primaryKeysToModify||[])e.push({type:"primary_key_modification",table:r.table,description:`Primary key modification on ${r.table} requires FK recreation`});return e}hasConstraintChanges(t,e){return t.isNullable!==!e.constraints?.nullable||t.isUnique!==!!e.constraints?.unique||t.defaultValue!==e.constraints?.default}generateDropForeignKeySql(t){return this.sql.getDbType()==="sqlite"?[]:t.relation.name?this.sql.alterTable(t.table,e=>{e.dropConstraint(t.relation.name);}):[]}generateDropPrimaryKeySql(t){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,e=>{e.dropPrimaryKey();})}generateDropUniqueConstraintSql(t,e){return this.sql.getDbType()==="sqlite"?[]:this.sql.alterTable(t,r=>{r.dropConstraint(`UNIQUE_${e}`);})}generateDropColumnSql(t){return this.sql.alterTable(t.table,e=>{e.dropColumn(t.column);})}generateDropTableSql(t){return [`DROP TABLE ${t.table}`]}};var mr=class{constructor(t){this.sql=t,this.models=Object.values(this.sql.models),this.dropResolver=new dr(t);}generateOperations(t){let e=[];e.push(...this.generateStructureCreationOperations(t)),e.push(...this.generateConstraintCreationOperations(t)),e.push(...this.generateDestructiveOperations(t)),e.push(...this.generateColumnModificationOperations(t));let r=l=>l.table&&l.constraint?`${l.table}::${l.constraint}`:void 0,o=new Set(e.filter(l=>l.type==="ADD_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),n=new Set(e.filter(l=>l.type==="DROP_FOREIGN_KEY").map(l=>r(l)).filter(Boolean)),s=new Set([...o].filter(l=>n.has(l)));return e.filter(l=>{let d=r(l);return d?!(s.has(d)&&(l.type==="ADD_FOREIGN_KEY"||l.type==="DROP_FOREIGN_KEY")):true})}generateStructureCreationOperations(t){let e=[];for(let r of t.tablesToAdd){let o=this.sql.createTable(r.table,n=>{for(let s of r.columns){if(Array.isArray(s.type)){n.enum(s.databaseName,s.type);continue}s.type&&this.executeBuilderMethod(r.table,n,s,[s.databaseName,s.length,s.precision&&!s.withTimezone?s.precision:void 0,s.scale,s.withTimezone?{withTimezone:s.withTimezone,precision:s.precision}:void 0].filter(Boolean),true);}});e.push({type:"CREATE_TABLE",phase:"STRUCTURE_CREATION",table:r.table,data:r,dependencies:[],sqlStatements:[o]});}for(let r of t.columnsToAdd){let o=this.generateAddColumnViaAlter(r);e.push({type:"ADD_COLUMN",phase:"STRUCTURE_CREATION",table:r.table,column:r.column.databaseName,data:r,dependencies:[`table.${r.table}`],sqlStatements:o});}return e}generateConstraintCreationOperations(t){let e=[];for(let o of t.uniquesToDrop||[]){let n=this.sql.alterTable(o.table,s=>{s.dropConstraint(o.name);});e.push({type:"DROP_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name,data:o,dependencies:[`table.${o.table}`],sqlStatements:n});}let r=new Set((t.uniquesToDrop||[]).map(o=>o.name));for(let o of t.indexesToDrop){if(r.has(o.index))continue;let n=new Se(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.alterTable(o.table,d=>{let m=a||Pe(o.table,o.columns[0]);d.addConstraint("primary_key",{columns:[o.columns[0]],constraintName:m});});e.push({type:"ADD_PRIMARY_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:a,data:o,dependencies:[`table.${o.table}`],sqlStatements:l});}for(let o of t.relationsToAdd){if(o.relation.type==="manyToMany")continue;let n=this.generateAddRelationViaAlter(o),s=this.computeFkConstraintName(o);e.push({type:"ADD_FOREIGN_KEY",phase:"CONSTRAINT_CREATION",table:o.table,constraint:s,data:o,dependencies:this.getForeignKeyDependencies(o),sqlStatements:n});}for(let o of t.uniquesToAdd||[]){let n=this.models.find(l=>l.table===o.table),s=(o.columns||[]).map(l=>n?.getColumns().find(m=>m.columnName===l)?.databaseName||l),a=this.sql.alterTable(o.table,l=>{l.addConstraint("unique",{columns:s,constraintName:o.name||"mandatory"});});e.push({type:"ADD_UNIQUE_CONSTRAINT",phase:"CONSTRAINT_CREATION",table:o.table,constraint:o.name||"mandatory",data:o,dependencies:[`table.${o.table}`],sqlStatements:a});}for(let o of t.indexesToAdd){let n=this.generateCreateIndexSql(o);e.push({type:"CREATE_INDEX",phase:"CONSTRAINT_CREATION",table:o.table,index:o.index,data:o,dependencies:[`table.${o.table}`],sqlStatements:[n]});}return e}computeFkConstraintName(t){let e=q(t.relation.constraintName);if(e)return e;let r=t.table;t.relation.type==="belongsTo"?r=t.relation.model().table:t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(r=q(t.relation.manyToManyOptions.throughModel));let n=this.models.find(a=>a.table===t.table)?.getColumns()||[],s=t.relation.columnName;return t.relation.type==="belongsTo"?s=n.find(l=>l.columnName===t.relation.foreignKey)?.databaseName||t.relation.foreignKey:s=n.find(l=>l.columnName===s)?.databaseName||s,J(t.table,s,r)}generateDestructiveOperations(t){return this.dropResolver.generateDropOperations(t)}generateColumnModificationOperations(t){let e=[];for(let r of t.columnsToModify||[]){let o=this.generateModifyColumnViaAlter(r);e.push({type:"MODIFY_COLUMN",phase:"DESTRUCTIVE_OPERATIONS",table:r.table,column:r.dbColumns.name,data:r,dependencies:[],sqlStatements:o});}return e}getForeignKeyDependencies(t){let e=[];if(t.relation.type==="belongsTo"){let o=t.relation.model();e.push(`table.${o.table}`);let n=o.primaryKey||"id",s=o.getColumns().find(a=>a.columnName===n);s&&e.push(`column.${o.table}.${s.databaseName}`);}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let o=q(t.relation.manyToManyOptions.throughModel);e.push(`table.${o}`);}e.push(`table.${t.table}`);let r=this.models.find(o=>o.table===t.table);if(r){let o=r.getColumns().find(n=>n.columnName===t.relation.columnName||n.databaseName===t.relation.columnName);o&&e.push(`column.${t.table}.${o.databaseName}`);}return e}executeBuilderMethod(t,e,r,o,n=true){let s=e[r.type](...o);return n&&(r.isPrimary&&s.primaryKey({constraintName:r.primaryKeyConstraintName||Pe(t,r.columnName)}),r.constraints?.default!==void 0&&s.default(r.constraints.default),r.constraints?.nullable===false?s.notNullable():r.constraints?.nullable===true&&s.nullable()),s}generateAddColumnViaAlter(t){let e=[t.column.databaseName,t.column.length,t.column.precision&&!t.column.withTimezone?t.column.precision:void 0,t.column.scale,t.column.withTimezone?{withTimezone:t.column.withTimezone,precision:t.column.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,r=>{r.addColumn(o=>{let n=this.executeBuilderMethod(t.table,o,t.column,e,false);return t.column.constraints?.default!==void 0&&n.default(t.column.constraints.default),t.column.constraints?.nullable===false?n.notNullable():t.column.constraints?.nullable===true&&n.nullable(),n});})}generateModifyColumnViaAlter(t){if(this.sql.getDbType()==="sqlite")return [];let e=[t.modelColumn.databaseName,t.modelColumn.length,t.modelColumn.precision&&!t.modelColumn.withTimezone?t.modelColumn.precision:void 0,t.modelColumn.scale,t.modelColumn.withTimezone?{withTimezone:t.modelColumn.withTimezone,precision:t.modelColumn.precision}:void 0].filter(Boolean);return this.sql.alterTable(t.table,o=>{o.alterColumn(n=>{let s=this.executeBuilderMethod(t.table,n,t.modelColumn,e,false);return t.modelColumn.constraints?.default!==void 0&&s.default(t.modelColumn.constraints.default),t.modelColumn.constraints?.nullable===false?s.notNullable():t.modelColumn.constraints?.nullable===true&&s.nullable(),s});})}generateCreateIndexSql(t){let e=this.models.find(s=>s.table===t.table),o=(e?.getIndexes().find(s=>s.name===t.index)?.columns||[]).map(s=>e?.getColumns().find(l=>l.columnName===s)?.databaseName||s),n=new Se(this.sql.getDbType());return n.createIndex(t.table,o,{constraintName:t.index}),n.queryStatements[0]||""}generateAddRelationViaAlter(t){let e=t.table,r=t.relation.foreignKey;t.relation.type==="belongsTo"?(e=t.relation.model().table,r=t.relation.model().primaryKey||"id"):t.relation.type==="manyToMany"&&t.relation.manyToManyOptions&&(e=q(t.relation.manyToManyOptions.throughModel),r=q(t.relation.manyToManyOptions.rightForeignKey),(!r||r==="undefined")&&(r=t.relation.model().primaryKey||"id"));let o=typeof t.relation.constraintName=="string"?t.relation.constraintName:void 0,n=q(r);if(t.relation.type==="belongsTo"){let c=t.relation.model(),p=c.primaryKey,h=c.getColumns().find(N=>N.columnName===p);if(h)n=h.databaseName;else {let N=c?.databaseCaseConvention||"preserve";n=k(p,N);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.model();if(typeof n=="string"&&n){let p=c.getColumns(),y=p.find(h=>h.columnName===n);if(y)n=y.databaseName;else {let h=c.primaryKey||"id",N=p.find(M=>M.columnName===h);if(N)n=N.databaseName;else {let M=c?.databaseCaseConvention||"preserve";n=k(n||h,M);}}}else {let p=c.primaryKey||"id",h=c.getColumns().find(N=>N.columnName===p);if(h)n=h.databaseName;else {let N=c?.databaseCaseConvention||"preserve";n=k(p,N);}}}let s=this.models.find(c=>c.table===t.table),a=s?.getColumns()||[],l=t.relation.columnName,d=a.find(c=>c.columnName===l);if(d)l=d.databaseName;else {let c=s?.databaseCaseConvention||"preserve";l=k(l,c);}if(t.relation.type==="belongsTo"){let c=a.find(p=>p.columnName===t.relation.foreignKey);if(c)l=c.databaseName;else {let p=s?.databaseCaseConvention||"preserve";l=k(t.relation.foreignKey,p);}}else if(t.relation.type==="manyToMany"&&t.relation.manyToManyOptions){let c=t.relation.manyToManyOptions.leftForeignKey,p=q(c),y=a.find(h=>h.columnName===p);if(y)l=y.databaseName;else {let h=s?.databaseCaseConvention||"preserve";l=k(p,h);}}let m=t.relation.onDelete?.toLowerCase(),u=t.relation.onUpdate?.toLowerCase();return this.sql.alterTable(t.table,c=>{let p=o||J(t.table,l,e);c.addConstraint("foreign_key",{columns:[l],references:{table:e,columns:[n]},constraintName:p,onDelete:m,onUpdate:u});})}formatSqlStatements(t){return t.map(e=>({...e,sqlStatements:e.sqlStatements.map(r=>sqlFormatter.format(r,{...this.sql.inputDetails.queryFormatOptions}).replace(/\n/g," ").replace(/\s+/g," "))}))}};function Zp(i){return i.replace(/\s+/g," ").trim()}function Xp(i){return i.replace(/\s*\([^)]*\)/g,"").trim()}function Ie(i,t){let e=Zp(t.toLowerCase()),r=Xp(e);switch(i){case "sqlite":{let o=[{test:n=>n==="increment",normalized:"integer"},{test:n=>n==="bigincrement",normalized:"integer"},{test:n=>n.includes("int"),normalized:"integer"},{test:n=>n.includes("char"),normalized:"varchar"},{test:n=>n.includes("text"),normalized:"text"},{test:n=>n.includes("clob"),normalized:"text"},{test:n=>n.includes("date"),normalized:"text"},{test:n=>n.includes("time"),normalized:"text"},{test:n=>n.includes("timestamp"),normalized:"text"},{test:n=>n.includes("datetime"),normalized:"text"},{test:n=>n.includes("blob"),normalized:"blob"},{test:n=>n.includes("real")||n.includes("floa")||n.includes("doub"),normalized:"real"},{test:n=>n.includes("numeric"),normalized:"numeric"},{test:n=>n.includes("bool"),normalized:"integer"},{test:n=>n.includes("uuid"),normalized:"varchar"},{test:n=>n.includes("ulid"),normalized:"varchar"},{test:n=>n.includes("jsonb"),normalized:"text"},{test:n=>n.includes("json"),normalized:"text"}];for(let n of o)if(n.test(r))return n.normalized;return r}case "mysql":case "mariadb":{if(r.endsWith("text")||r==="text")return "text";switch(r){case "int":case "integer":case "increment":return "integer";case "tinyint":return "tinyint";case "smallint":return "smallint";case "mediumint":return "mediumint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "double":case "double precision":return "double";case "real":return "double";case "decimal":case "numeric":return "numeric";case "varchar":case "character varying":return "varchar";case "char":case "character":return "char";case "uuid":return "varchar";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "timestamp":return "timestamp";case "time":return "time";case "year":return "year";case "jsonb":return "json";case "json":return "json";case "enum":return "enum";case "binary":return "binary";case "varbinary":return "varbinary";case "tinyblob":return "tinyblob";case "mediumblob":return "mediumblob";case "longblob":return "longblob";case "blob":return "blob";case "boolean":case "bool":return "boolean";default:return r}}case "postgres":case "cockroachdb":{if(r.endsWith("text")||r==="text")return "text";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("time"))return "time";if(r==="datetime")return "timestamp";switch(r){case "character varying":return "varchar";case "character":return "char";case "ulid":return "varchar";case "double precision":return "double";case "real":return "real";case "float":return "real";case "integer":case "int4":case "int":case "increment":case "serial":return "integer";case "mediumint":return "integer";case "bigint":case "int8":case "bigincrement":case "bigserial":return "bigint";case "smallint":case "int2":return "smallint";case "tinyint":return "smallint";case "uuid":return "uuid";case "year":return "smallint";case "bytea":return "bytea";case "binary":case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":return "bytea";case "boolean":case "bool":return "boolean";case "numeric":case "decimal":return "numeric";case "jsonb":return "jsonb";case "json":return "json";case "date":return "date";default:return r}}case "mssql":{if(r.endsWith("text")||r==="text"||r==="ntext")return "text";if(r.startsWith("datetime2"))return "datetime2";if(r.startsWith("datetimeoffset"))return "datetimeoffset";switch(r){case "int":case "integer":case "increment":return "int";case "tinyint":return "tinyint";case "smallint":return "smallint";case "bigint":case "bigincrement":return "bigint";case "float":return "float";case "real":return "real";case "double":case "double precision":return "float";case "decimal":case "numeric":return "decimal";case "money":return "money";case "smallmoney":return "smallmoney";case "varchar":case "character varying":return "varchar";case "nvarchar":return "nvarchar";case "char":case "character":return "char";case "nchar":return "nchar";case "uuid":case "uniqueidentifier":return "uniqueidentifier";case "ulid":return "varchar";case "date":return "date";case "datetime":return "datetime";case "smalldatetime":return "smalldatetime";case "time":return "time";case "timestamp":return "datetime2";case "binary":return "binary";case "varbinary":case "blob":case "tinyblob":case "mediumblob":case "longblob":case "bytea":return "varbinary";case "image":return "image";case "bit":case "boolean":case "bool":return "bit";case "json":case "jsonb":return "nvarchar";case "xml":return "xml";case "sql_variant":return "sql_variant";default:return r}}case "oracledb":{if(r.endsWith("clob")||r==="clob"||r==="nclob")return "clob";if(r.startsWith("timestamp"))return "timestamp";if(r.startsWith("interval"))return "interval";switch(r){case "varchar2":case "nvarchar2":case "character varying":return "varchar2";case "char":case "nchar":case "character":return "char";case "number":case "numeric":case "decimal":case "integer":case "int":case "smallint":case "tinyint":case "mediumint":case "bigint":return "number";case "binary_float":case "float":case "real":return "binary_float";case "binary_double":case "double":case "double precision":return "binary_double";case "date":return "date";case "blob":case "raw":case "long raw":case "bytea":case "binary":case "varbinary":return "blob";case "json":case "jsonb":return "clob";case "boolean":case "bool":return "number";case "uuid":case "ulid":return "varchar2";default:return r}}default:return r}}var Ye=class i{constructor(t){this.emptyStatements=[/alter table ".*"$/];this.sql=t,this.models=Object.values(this.sql.models),this.data={columnsToAdd:[],columnsToDrop:[],columnsToModify:[],indexesToAdd:[],indexesToDrop:[],uniquesToAdd:[],uniquesToDrop:[],tablesToAdd:[],relationsToAdd:[],relationsToDrop:[],relationsToModify:[],primaryKeysToAdd:[],primaryKeysToDrop:[],primaryKeysToModify:[]};}static async makeDiff(t){let e=new i(t);return await Promise.all(e.models.map(async r=>{let o=await e.sql.getTableSchema(r.table),n={columns:r.getColumns().filter(d=>d?.type!==void 0&&d?.type!==null),indexes:r.getIndexes(),relations:r.getRelations()};if(!o.columns.length){e.data.tablesToAdd.push({table:r.table,columns:n.columns});for(let m of n.indexes)o.indexes.map(u=>u.name).includes(m.name)||e.data.indexesToAdd.push({table:r.table,index:m.name});let d=r.getUniques?.()||[];for(let m of d)e.data.uniquesToAdd.push({table:r.table,name:m.name||"mandatory",columns:m.columns});for(let m of n.relations){if(m.type!=="belongsTo")continue;let u=q(m.constraintName);o.foreignKeys.find(p=>p.name===u)||e.data.relationsToAdd.push({table:r.table,relation:m,onDelete:m.onDelete,onUpdate:m.onUpdate});}return}for(let d of n.columns)o.columns.some(u=>u.name===d.databaseName||u.name===d.columnName)||e.data.columnsToAdd.push({table:r.table,column:d});for(let d of o.columns)n.columns.some(u=>u.databaseName===d.name||u.columnName===d.name)||e.data.columnsToDrop.push({table:r.table,column:d.name});for(let d of n.indexes)o.indexes.map(m=>m.name).includes(d.name)||e.data.indexesToAdd.push({table:r.table,index:d.name});let s=r.getUniques?.()||[];for(let d of s)o.indexes.some(u=>u.name===d.name&&u.isUnique)||e.data.uniquesToAdd.push({table:r.table,name:d.name||"mandatory",columns:d.columns});for(let d of o.indexes)d.isUnique||n.indexes.map(u=>u.name).includes(d.name)||e.data.indexesToDrop.push({table:r.table,index:d.name});for(let d of o.indexes){if(!d.isUnique)continue;(r.getUniques?.()||[]).map(u=>u.name).includes(d.name)||e.data.uniquesToDrop.push({table:r.table,name:d.name});}for(let d of n.columns){let m=o.columns.find(p=>p.name===d.databaseName||p.name===d.columnName);if(!m)continue;let u=!e.areColumnsEqual(m,d,o.indexes),c=e.getDefaultChange({table:r.table,dbColumns:m,modelColumn:d});(u||c)&&e.data.columnsToModify.push({table:r.table,dbColumns:m,modelColumn:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;if(d.type==="manyToMany"&&d.manyToManyOptions){let c=q(d.manyToManyOptions.throughModel);e.data.relationsToAdd.push({table:c,relation:{type:"belongsTo",model:()=>r,columnName:q(d.manyToManyOptions.leftForeignKey),foreignKey:d.manyToManyOptions.leftForeignKey,constraintName:d.constraintName?q(d.constraintName):J(c,q(d.manyToManyOptions.leftForeignKey||xe(r.table)),r.table),onDelete:d.onDelete,onUpdate:d.onUpdate},onDelete:d.onDelete,onUpdate:d.onUpdate});continue}let m=q(d.constraintName);if(m&&o.foreignKeys.some(c=>c.name===m))continue;o.foreignKeys.find(c=>e.relationMatchesDbRelation(r,d,c))||e.data.relationsToAdd.push({table:r.table,relation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let a=new Set(n.relations.filter(d=>d.type==="belongsTo").map(d=>{let m=q(d.foreignKey)||d.columnName,c=r.getColumns().find(p=>p.columnName===m)?.databaseName||m;return q(d.constraintName)||J(r.table,c,d.model().table)}));for(let d of o.foreignKeys){if(d.name&&a.has(d.name))continue;n.relations.find(u=>u.type!=="belongsTo"&&u.type!=="manyToMany"?false:e.relationMatchesDbRelation(r,u,d))||e.data.relationsToDrop.push({table:r.table,relation:d});}for(let d of n.relations){if(d.type!=="belongsTo"&&d.type!=="manyToMany")continue;let m=o.foreignKeys.find(u=>e.relationMatchesDbRelation(r,d,u));m&&!e.areRelationsEqual(m,d)&&e.data.relationsToModify.push({table:r.table,dbRelation:m,modelRelation:d,onDelete:d.onDelete,onUpdate:d.onUpdate});}let l=r.primaryKey;if(l&&!o.primaryKey&&e.data.primaryKeysToAdd.push({table:r.table,columns:[l]}),o.primaryKey&&!l&&e.data.primaryKeysToDrop.push({table:r.table,columns:o.primaryKey.columns,name:o.primaryKey.name}),l&&o.primaryKey){let d=r.getColumns().find(m=>m.columnName===l);d&&!e.arePrimaryKeysEqual(o.primaryKey,d)&&e.data.primaryKeysToModify.push({table:r.table,dbPrimaryKey:o.primaryKey,modelPrimaryKey:l});}})),await e.processManyToMany(),await e.removeFkChurnByName(),e}getSqlStatements(){let t=this.getSqlStatementsByPhase();return Object.values(t).flat()}getSqlStatementsByPhase(){let t=new mr(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=Ie(n,t.dataType),a=typeof e.type=="string"?Ie(n,e.type):void 0;a&&o&&(o=s===a),e.length!=null&&t.length!=null&&o&&(o=t.length===e.length);let l=a==="real"||a==="double"||a==="float";if(e.precision!=null&&t.precision!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.precision===e.precision)),e.scale!=null&&t.scale!=null&&((n==="postgres"||n==="cockroachdb")&&l||o&&(o=t.scale===e.scale)),typeof e.type=="string"&&(a==="timestamp"||a==="time")&&e.withTimezone!==void 0&&t.withTimezone!==void 0&&o&&(o=!!t.withTimezone==!!e.withTimezone),e.constraints?.nullable!==void 0){let d=e.constraints.nullable,m=t.isNullable;o=o&&d===m;}return o}areRelationsEqual(t,e){let r=q(e.constraintName),o=r?t.name===r:true;if(e.type==="belongsTo"){let d=e.model(),m=d.primaryKey||"id",u=d.getColumns().find(y=>y.columnName===m),c=d.table,p=u?.databaseName||m;o=o&&t.referencedTable===c&&!!t.referencedColumns&&t.referencedColumns.length===1&&t.referencedColumns[0]===p;}else if(e.type==="manyToMany"&&e.manyToManyOptions){let d=q(e.manyToManyOptions.throughModel);o=o&&t.referencedTable===d;}let n=t.onDelete?.toLowerCase(),s=t.onUpdate?.toLowerCase(),a=e.onDelete?.toLowerCase(),l=e.onUpdate?.toLowerCase();return a&&o&&(o=n===a),l&&o&&(o=s===l),o}relationMatchesDbRelation(t,e,r){let o,n=e;if(n&&n.model){if(typeof n.model=="function"&&n.model.table)o=n.model;else if(typeof n.model=="function")try{let h=n.model();h&&h.table&&(o=h);}catch{}}if(!o)return false;let s=e.type==="belongsTo"?o.table:e.type==="manyToMany"&&e.manyToManyOptions?q(e.manyToManyOptions.throughModel):void 0;if(s&&r.referencedTable!==s)return false;let a=q(e.constraintName);if(a&&r.name&&a!==r.name)return false;let l=t.getColumns(),m=(n.type||"belongsTo")==="belongsTo"?q(n.foreignKey):n.columnName,u=l.find(h=>h.columnName===m);u&&(m=u.databaseName);let c=o.primaryKey||"id",y=o.getColumns().find(h=>h.columnName===c)?.databaseName||c;return r.columns.length===1&&r.columns[0]===m&&r.referencedColumns.length===1&&r.referencedColumns[0]===y}arePrimaryKeysEqual(t,e){if(t.columns.length!==1)return false;let o=t.columns[0]===e.databaseName,n=!t.name||!e.primaryKeyConstraintName||t.name===e.primaryKeyConstraintName;return o&&n}getDefaultChange(t){let e=this.sql.getDbType(),r=Ie(e,t.dbColumns.dataType),o=typeof t.modelColumn.type=="string"?Ie(e,t.modelColumn.type):void 0;if(o&&r!==o||t.modelColumn.length!=null&&t.dbColumns.length!=null&&t.dbColumns.length!==t.modelColumn.length||t.modelColumn.precision!=null&&t.dbColumns.precision!=null&&t.dbColumns.precision!==t.modelColumn.precision||t.modelColumn.scale!=null&&t.dbColumns.scale!=null&&t.dbColumns.scale!==t.modelColumn.scale||typeof t.modelColumn.type=="string"&&(o==="timestamp"||o==="time")&&t.modelColumn.withTimezone!==void 0&&t.dbColumns.withTimezone!==void 0&&!!t.dbColumns.withTimezone!=!!t.modelColumn.withTimezone)return false;let n=t.modelColumn.constraints?.default!==void 0,s=t.dbColumns.defaultValue!==null&&t.dbColumns.defaultValue!==void 0;if(n&&!s)return "set";if(!n&&s)return "drop";if(n&&s){let a=String(t.dbColumns.defaultValue),l=String(t.modelColumn.constraints?.default),d=this.normalizeDefaultValue(e,r,a),m=this.normalizeDefaultValue(e,o||r,l);return d!==m?"set":false}return false}normalizeDefaultValue(t,e,r){let o=String(r).trim();if(!o)return o;if(t==="postgres"||t==="cockroachdb"){if(e==="json"||e==="jsonb")try{o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::(jsonb?|[a-zA-Z_ ]+[\[\]]*)/g,"");let s=o.match(/^'(.*)'$/s);if(s&&(o=s[1]),o==="{}"||o==="")return "{}";let a=JSON.parse(o);return JSON.stringify(a)}catch{}o=o.replace(/^\((.*)\)$/s,"$1"),o=o.replace(/::[a-zA-Z_ ]+[\[\]]*/g,"");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^true$/i.test(o)?"true":/^false$/i.test(o)?"false":/^null$/i.test(o)?"null":(o)}if(t==="mysql"||t==="mariadb"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),/^current_timestamp(?:\(\d+\))?$/i.test(o)?"current_timestamp":o}if(t==="sqlite"){o=o.replace(/^\((.*)\)$/s,"$1");let n=o.match(/^'(.*)'$/s);return n&&(o=n[1]),o.toLowerCase()}return o}async processManyToMany(){let t=new Set;for(let e of this.models){let r=e.getRelations();for(let o of r){if(o.type!=="manyToMany"||!o.manyToManyOptions||o.manyToManyOptions.wasModelProvided)continue;let n=q(o.manyToManyOptions.throughModel);if(t.has(n))continue;t.add(n);let s=this.models.find(x=>x.table===o?.manyToManyOptions?.primaryModel),a=o.model();if(!s||!a)continue;let l=s.primaryKey||"id",d=a.primaryKey||"id",m=s.getColumns().find(x=>x.columnName===l),u=a.getColumns().find(x=>x.columnName===d);if(!m||!u)continue;let c=q(o.manyToManyOptions.leftForeignKey)||l,p=q(o.manyToManyOptions.rightForeignKey)||d,y=await this.sql.getTableSchema(n);if(!y.columns.length){this.data.tablesToAdd.push({table:n,columns:[this.clonePkAsColumn(m,c),this.clonePkAsColumn(u,p)]}),this.pushM2mFkRelations({throughTable:n,leftModel:s,rightModel:a,leftFkName:c,rightFkName:p,onDelete:o.onDelete,onUpdate:o.onUpdate,constraintName:void 0});continue}let h=this.clonePkAsColumn(m,c),N=this.clonePkAsColumn(u,p),M=y.columns.find(x=>x.name===c),$=y.columns.find(x=>x.name===p),V=M?this.areColumnsEqual(M,h,y.indexes):false,C=$?this.areColumnsEqual($,N,y.indexes):false;for(let x of y.foreignKeys){let G=x.referencedTable===s.table,oe=x.referencedTable===a.table;if(!G&&!oe)continue;let Ke=G?c:p,Ce=x.columns[0];Ce&&Ce!==Ke&&(this.data.relationsToDrop.push({table:n,relation:x}),Ce!==c&&Ce!==p&&this.data.columnsToDrop.push({table:n,column:Ce}));}let D={};V||(D[h.databaseName]=h),C||(D[N.databaseName]=D[N.databaseName]||N);for(let x of Object.keys(D))this.data.columnsToAdd.push({table:n,column:D[x]});let A=this.buildBelongsToRelation(n,()=>s,c,l,void 0,o.onDelete,o.onUpdate),S=this.buildBelongsToRelation(n,o.model,p,d,void 0,o.onDelete,o.onUpdate),E=y.foreignKeys.find(x=>x.referencedTable===s.table&&x.columns.length===1&&x.columns[0]===c),Te=y.foreignKeys.find(x=>x.referencedTable===a.table&&x.columns.length===1&&x.columns[0]===p);if(!E){let x=y.foreignKeys.find(G=>G.referencedTable===s.table);x&&this.data.relationsToDrop.push({table:n,relation:x}),this.data.relationsToAdd.push(A);}if(!Te){let x=y.foreignKeys.find(G=>G.referencedTable===a.table);x&&this.data.relationsToDrop.push({table:n,relation:x}),this.data.relationsToAdd.push(S);}}}}async removeFkChurnByName(){let t=new Set;for(let o of this.data.relationsToAdd)t.add(o.table);for(let o of this.data.relationsToDrop)t.add(o.table);let e=new Map;for(let o of t){let n=await this.sql.getTableSchema(o),s=new Set((n.foreignKeys||[]).map(a=>a.name).filter(Boolean));e.set(o,s);}let r=new Map;for(let o of this.models){let n=o.getRelations(),s=new Set;for(let a of n){if(a.type!=="belongsTo")continue;let l=a.foreignKey||a.columnName,m=o.getColumns().find(c=>c.columnName===l)?.databaseName||l,u=q(a.constraintName)||J(o.table,m,a.model().table);s.add(u);}r.set(o.table,s);}this.data.relationsToAdd=await Promise.all(this.data.relationsToAdd.map(async o=>{let n=await this.sql.getTableSchema(o.table),s=this.models.find(h=>h.table===o.table),a=s?.getColumns()||[],l=o.relation.columnName;o.relation.type==="belongsTo"?l=a.find(N=>N.columnName===o.relation.foreignKey)?.databaseName||o.relation.foreignKey:l=a.find(N=>N.columnName===l)?.databaseName||l;let d=o.table,m=o.relation.foreignKey;if(o.relation.type==="belongsTo"){let h=o.relation.model();d=h.table;let N=h.primaryKey||"id";m=h.getColumns().find($=>$.columnName===N)?.databaseName||N;}let u=new Set([l,o.relation.columnName].filter(Boolean)),c=n.foreignKeys.some(h=>{if(h.columns.length!==1||h.referencedColumns.length!==1)return false;let N=u.has(h.columns[0]),M=h.referencedTable===d,$=h.referencedColumns[0]===m;return N&&M&&$}),p=q(o.relation.constraintName)||J(o.table,l,d),y=e.get(o.table)||new Set;if(c||p&&y.has(p))return null;if(o.relation.type==="manyToMany"&&o.relation.manyToManyOptions){let h=q(o.relation.manyToManyOptions.throughModel),N=q(o.relation.manyToManyOptions.leftForeignKey),M=q(o.relation.manyToManyOptions.rightForeignKey),$=o.table===h&&o.relation.columnName===N&&o.relation.model().table===s?.table,V=o.table===h&&o.relation.columnName===M&&o.relation.model().table!==s?.table,C=await this.sql.getTableSchema(h),D=C.foreignKeys.some(S=>S.columns.length===1&&S.columns[0]===N&&S.referencedTable===(s?.table||"")),A=C.foreignKeys.some(S=>S.columns.length===1&&S.columns[0]===M&&S.referencedTable===o.relation.model().table);if($&&D||V&&A)return null}return o})).then(o=>o.filter(Boolean)),this.data.relationsToDrop=await Promise.all(this.data.relationsToDrop.map(async o=>{let n=this.models.find(d=>d.table===o.table);if(!n)return o;let s=n.getRelations(),a=n.getColumns();return s.some(d=>{if(d.type!=="belongsTo")return false;let u=a.find(N=>N.columnName===d.foreignKey)?.databaseName||d.foreignKey,c=d.model(),p=c.primaryKey||"id",h=c.getColumns().find(N=>N.columnName===p)?.databaseName||p;return o.relation.columns.length===1&&o.relation.columns[0]===u&&o.relation.referencedTable===c.table&&o.relation.referencedColumns.length===1&&o.relation.referencedColumns[0]===h})?null:o})).then(o=>o.filter(Boolean));}clonePkAsColumn(t,e){return {columnName:e,databaseName:e,isPrimary:false,type:t.type,length:t.length,precision:t.precision,scale:t.scale,withTimezone:t.withTimezone,constraints:{nullable:false}}}pushM2mFkRelations(t){let e=this.buildBelongsToRelation(t.throughTable,()=>t.leftModel,t.leftFkName,t.leftModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate),r=this.buildBelongsToRelation(t.throughTable,()=>t.rightModel,t.rightFkName,t.rightModel.primaryKey||"id",t.constraintName,t.onDelete,t.onUpdate);this.data.relationsToAdd.push(e),this.data.relationsToAdd.push(r);}buildBelongsToRelation(t,e,r,o,n,s,a){let l=n?q(n):J(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 ge=class extends w{constructor(e,r=false){super("delete from",r);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="delete";this.file="delete";this.fromNode=e;}};var L=class extends w{constructor(e,r){super("from");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="from";this.file="from";this.table=e,this.alias=r;}};var W=class extends 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 ae=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 ee=class extends w{constructor(e,r=[],o=[],n=false){super("update",n);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="update";this.file="update";this.fromNode=e,this.columns=r,this.values=o;}};var v=class extends 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 ut=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 te=class extends v{constructor(e,r,o=false,n,s,a=false){super(e,r,o,"=",s,a);this.file="where_json";this.jsonOperator=n,this.value=s;}};var Me=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 ur=class extends stream.Readable{constructor(t,e,r=[],o){super({objectMode:true}),this.db=t,this.query=e,this.params=r,this.started=false,this.events=o;}_read(){this.started||(this.started=true,this.readRows());}readRows(){let t=0,e=false,r=false;this.db.each(this.query,this.params,(o,n)=>{if(o){r=true,this.emit("error",o);return}t++;let s=false,a,l={write:d=>{s=true,a=d;}};Promise.resolve(this.events.onData?.(l,n)).then(()=>{if(!r){if(s){this.push(a);return}this.push(n);}}).catch(d=>{r=true,this.emit("error",d);}).finally(()=>{t--,e&&t===0&&!r&&this.push(null);});},o=>{if(o){r=true,this.emit("error",o);return}e=true,t===0&&!r&&this.push(null);});}},Lc=(i,t,e,r)=>{let o=["begin","begin transaction","commit","rollback"].includes(i.trim().toLowerCase()),n=r.customConnection??e.getPool();if(o)return new Promise((d,m)=>{n.run(i,t,function(u){u&&m(u),d(this.changes);});});if(r.mode==="fetch")return new Promise((d,m)=>{n.all(i,t,(u,c)=>{u&&m(u),(!c||!c.length)&&d([]),d(c);});});let s=r?.typeofModel;if(!s)return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.message)):d(this.changes);});});let a=s.primaryKey,l=s.table;if(r.mode==="insertOne"||r.mode==="insertMany"){if(r.mode==="insertOne")return new Promise((u,c)=>{n.run(i,t,function(p){if(p)return c(p);let y=r.models&&Array.isArray(r.models)&&r.models.length?r.models[0]:null;if(!a){u([y]);return}let h=y?.[a]||this.lastID;if(!h)return c(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let N=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(N,[h],(M,$)=>{if(M)return c(M);u([$]);});});});if(!Array.isArray(r.models))throw new T("SqlRunnerUtils::massiveInsert models should be an array, report to the maintainers.","DEVELOPMENT_ERROR");let d=r.models;if(!a)return new Promise((u,c)=>{n.run(i,t,function(p){if(p)return c(p);u(d);});});let m=[];return new Promise(async(u,c)=>{try{let p=d.map(async y=>{let h=new f(s),{columns:N,values:M}=await h.prepareColumns(Object.keys(y),Object.values(y),"insert"),$=Object.fromEntries(N.map((A,S)=>[A,M[S]])),V=new b(s,e.getDbType()),{sql:C,bindings:D}=V.parse([new W(new L(s.table),[$])]);return new Promise((A,S)=>{n.run(C,D,function(E){if(E)return S(E);let Te=y[a]||this.lastID;if(!Te)return S(new T("SqlRunnerUtils::promisifySqliteQuery","MODEL_HAS_NO_PRIMARY_KEY"));let x=`SELECT * FROM ${l} WHERE ${a} = ?`;n.get(x,[Te],(G,oe)=>{if(G)return S(G);A(oe);});});})});m=await Promise.all(p),u(m);}catch(p){c(p);}})}return new Promise((d,m)=>{n.run(i,t,function(u){u?m(new Error(u.message)):d(this.changes);});})};var tf=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/,rf=/^\d{4}-\d{2}-\d{2}$/,qa=i=>typeof i!="string"?i:tf.test(i)?new Date(i.replace(" ","T")+"Z"):rf.test(i)?new Date(i+"T00:00:00Z"):i,of=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);}}),Uc=async i=>{let t={};for(let e in i){let r=i[e];r&&typeof r=="object"&&r.constructor?.name==="Lob"?t[e]=await of(r):t[e]=r;}return t};var j=async(i,t,e,r,o="rows",n)=>{switch(n?.shouldNotLog||Z(i,e.logs,t),r){case "mysql":case "mariadb":let s=e.sqlConnection??e.getPool(),a=await ct(()=>s.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?a[0].affectedRows:o==="raw"?a:a[0];case "postgres":case "cockroachdb":let l=e.sqlConnection??e.getPool(),d=await ct(()=>l.query(i,t),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="rows"?d.rows:o==="raw"?d:d.rowCount;case "sqlite":let m=await ct(()=>Lc(i,t,e,{typeofModel:n?.sqlLiteOptions?.typeofModel,mode:n?.sqlLiteOptions?.mode||"fetch",models:n?.sqlLiteOptions?.models}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="raw"?Array.isArray(m)?m:[m]:m;case "mssql":let u=e.getPool(),c=e.sqlConnection?e.sqlConnection.request():u.request();t.forEach((V,C)=>{c.input(`p${C}`,V);});let p=0,y=i.replace(/\?|@(\d+)/g,()=>`@p${p++}`),h=await ct(()=>c.query(y),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?h.rowsAffected[0]:o==="raw"?h:h.recordset;case "oracledb":let N=4002,M=null,$=!!e.sqlConnection;try{M=e.sqlConnection?e.sqlConnection:await e.getConnection();let V=t.map(qa),C=await ct(()=>M.execute(i,V,{outFormat:N,autoCommit:!$}),e.inputDetails.connectionPolicies?.retry,e.logs);return o==="affectedRows"?C.rowsAffected:o==="raw"?C:await Promise.all(C.rows?.map(async A=>{let S=await Uc(A),E={};for(let Te in S)E[Te.toLowerCase()]=S[Te];return E})??[])}finally{M&&!$&&await M.close();}default:throw new T("ExecSql",`UNSUPPORTED_DATABASE_TYPE_${r}`)}},pr=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 stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),m=a.connection.query(i,t).stream({highWaterMark:r.highWaterMark,objectMode:r.objectMode??true}),u=0,c=false,p=false,y=()=>{try{a.release();}catch{}};return m.on("data",h=>{if(o.onData){u++,Promise.resolve(o.onData(l,h)).then(()=>{u--,c&&u===0&&!p&&(y(),l.end());}).catch(N=>{p=true,y(),l.destroy(N);});return}l.write(h);}),m.on("end",()=>{c=true,u===0&&!p&&(y(),l.end());}),m.on("error",h=>{p=true,y(),l.destroy(h);}),l.on("close",()=>{y();}),l}case "cockroachdb":case "postgres":{let s=e.getPool(),a=e.sqlConnection??await s.connect(),l=await import('pg-query-stream').catch(()=>{throw new Q("pg-query-stream")}),d=new stream.PassThrough({objectMode:r.objectMode||true,highWaterMark:r.highWaterMark}),m=new l.default(i,t,{highWaterMark:r.highWaterMark,rowMode:r.rowMode,batchSize:r.batchSize,types:r.types}),u=a.query(m),c=0,p=false,y=false,h=N=>{try{a.release(N);}catch{}};return u.on("data",N=>{if(o.onData){c++,Promise.resolve(o.onData(d,N)).then(()=>{c--,p&&c===0&&!y&&(h(),d.end());}).catch(M=>{y=true,h(M),d.destroy(M);});return}d.write(N);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),d.end());}),u.on("error",N=>{y=true,h(N),d.destroy(N);}),d}case "sqlite":{let s=e.sqlConnection??e.getPool();return new ur(s,i,t,{onData:o.onData})}case "mssql":{let s=e.sqlConnection??e.getPool(),a=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),l=s.request();l.stream=true,t.forEach((y,h)=>{l.input(`p${h}`,y);});let d=0,m=i.replace(/\?|@(\d+)/g,()=>`@p${d++}`),u=0,c=false,p=false;return l.on("row",y=>{if(!p){if(o.onData){u++,Promise.resolve(o.onData(a,y)).then(()=>{u--,c&&u===0&&!p&&a.end();}).catch(h=>{p=true,a.destroy(h);});return}a.write(y);}}),l.on("error",y=>{p=true,a.destroy(y);}),l.on("done",()=>{c=true,u===0&&!p&&a.end();}),l.query(m),a}case "oracledb":{let s=e.getPool(),a=e.sqlConnection??await s.getConnection(),l=new stream.PassThrough({objectMode:r.objectMode??true,highWaterMark:r.highWaterMark}),d=4002,m=t.map(qa),u=a.queryStream(i,m,{outFormat:d}),c=0,p=false,y=false,h=async()=>{try{await a.close();}catch{}};return u.on("data",N=>{if(y)return;let M={};for(let $ in N)M[$.toLowerCase()]=N[$];if(o.onData){c++,Promise.resolve(o.onData(l,M)).then(()=>{c--,p&&c===0&&!y&&(h(),l.end());}).catch($=>{y=true,h(),l.destroy($);});return}l.write(M);}),u.on("end",()=>{p=true,c===0&&!y&&(h(),l.end());}),u.on("error",N=>{y=true,h(),l.destroy(N);}),l}default:throw new T("ExecSqlStreaming",`UNSUPPORTED_DATABASE_TYPE_${n}`)}};async function ct(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++,Da(`Retrying sql in ${n}ms (attempt ${r}/${o})`,"info",e),await new Promise(l=>setTimeout(l,n)),s();throw a}}return s()}var B=(i,t="millis",e=3)=>async(...r)=>{let o=performance.now(),n=await i(...r),s=performance.now()-o;return [(t==="millis"?s:s/1e3).toFixed(e),n]};var X=class extends 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 pt=class{constructor(t,e,r){this.dbType=e,this.sqlDataSource=r,this.modelRelations=Qt(t),this.modelRelationsMap=new Map(this.modelRelations.map(o=>[o.columnName,o]));}getRelationFromModel(t){let e=this.modelRelationsMap.get(t.toString());if(!e)throw new T("SqlModelManagerUtils::getRelationFromModel",`RELATION_NOT_FOUND_IN_MODEL_${t.toString()}`);return e}};function fr(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 Fc(i,t){return {perPage:i,total:t,firstPage:1,isEmpty:t===0}}var Ge=i=>typeof i=="number"?i:parseFloat(i);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 yr=class extends w{constructor(){super("distinct");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinct";this.file="distinct";}};var hr=class extends w{constructor(e){super("select");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="distinctOn";this.file="distinct_on";this.columns=e;}};var re=class extends w{constructor(e,r,o,n="inner",s,a=false){super(`${n} join`,a);this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=true;this.folder="join";this.file="join";this.type="inner";this.table=e,this.left=r,this.right=o,this.on=s;}};var ft=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 gr=class extends w{constructor(e){super("limit");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="limit";this.file="limit";this.limit=e;}};var br=class extends w{constructor(e){super("offset");this.chainsWith=" ";this.canKeywordBeSeenMultipleTimes=false;this.folder="offset";this.file="offset";this.offset=e;}};var yt=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 Tr=class{constructor(t,e){this.model=t,this.sqlDataSource=e,this.groupByNodes=[],this.orderByNodes=[],this.limitNode=null,this.offsetNode=null,this.logs=this.sqlDataSource.logs;let r=this.model?.getColumns;this.modelColumns=typeof r=="function"?r.call(this.model):[],this.modelColumnsMap=new Map(this.modelColumns.map(o=>[o.columnName,o]));}clearGroupBy(){return this.groupByNodes=[],this}clearOrderBy(){return this.orderByNodes=[],this}clearLimit(){return this.limitNode=null,this}clearOffset(){return this.offsetNode=null,this}groupBy(...t){return t.forEach(e=>{this.groupByNodes.push(new ft(e));}),this}groupByRaw(t){return this.groupByNodes.push(new ft(t,true)),this}orderBy(t,e){return this.orderByNodes.push(new yt(t,e)),this}orderByRaw(t){return this.orderByNodes.push(new yt(t,"asc",true)),this}limit(t){return typeof t!="number"&&g.warn(`${this.model.name}::limit Non numeric value provided to \`limit\``),this.limitNode=new gr(t),this}offset(t){return typeof t!="number"&&g.warn(`${this.model.name}::offset Non numeric value provided to \`offset\``),this.offsetNode=new br(t),this}};var Nr=class extends Tr{constructor(t,e){super(t,e),this.joinNodes=[];}clearJoin(){return this.joinNodes=[],this}joinRaw(t){return this.joinNodes.push(new re(t,"","","inner",{operator:"="},true)),this}leftJoinRaw(t){return this.joinNodes.push(new re(t,"","","left",{operator:"="},true)),this}rightJoinRaw(t){return this.joinNodes.push(new re(t,"","","right",{operator:"="},true)),this}fullJoinRaw(t){return this.joinNodes.push(new re(t,"","","full",{operator:"="},true)),this}crossJoinRaw(t){return this.joinNodes.push(new re(t,"","","cross",{operator:"="},true)),this}naturalJoinRaw(t){return this.joinNodes.push(new re(t,"","","natural",{operator:"="},true)),this}innerJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.join(typeof t=="string"?t:t.table,e,n,s),this}join(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,n,"inner",{operator:s||"="})),this}leftJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,n,"left",{operator:s||"="})),this}rightJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,n,"right",{operator:s||"="})),this}fullJoin(t,e,r,o){let n=r,s=o;if(!n){if(!this.model.primaryKey)throw new T("JoinQueryBuilder::join","MODEL_HAS_NO_PRIMARY_KEY");n=`${this.model.table}.${this.model.primaryKey}`;}return this.joinNodes.push(new re(typeof t=="string"?t:t.table,e,n,"full",{operator:s||"="})),this}};var wr=class extends Nr{constructor(e,r){super(e,r);this.modelSelectedColumns=[];this.modelAnnotatedColumns=[];this.dbType=r.getDbType(),this.fromNode=new L(this.model.table||""),this.distinctNode=null,this.distinctOnNode=null,this.selectNodes=[];}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],e.map(o=>k(o,this.model.databaseCaseConvention)).forEach(o=>{this.selectNodes.push(new X(o));}),this}selectRaw(e){return this.selectNodes.push(new X(e,void 0,void 0,true)),this}clearSelect(){return this.modelSelectedColumns=[],this.selectNodes=[],this}clearFrom(){return this.fromNode=new L(this.model.table||""),this}clearDistinct(){return this.distinctNode=null,this}clearDistinctOn(){return this.distinctOnNode=null,this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes.push(new X(s,a,n)),this.modelAnnotatedColumns.push(a),this}from(e){return this.fromNode=new L(e),this}table(e){return this.fromNode=new L(e),this}distinct(){return this.distinctNode=new yr,this}distinctOn(...e){return this.distinctOnNode=new hr(e),this}};var qr=class extends wr{constructor(e,r,o=false){super(e,r);this.isNestedCondition=false;this.whereNodes=[],this.havingNodes=[],this.isNestedCondition=o;}clearWhere(){return this.whereNodes=[],this}clearHaving(){return this.havingNodes=[],this}strictWhen(e,r){return e==null?this:(r(this),this)}when(e,r){return e?(r(this),this):this}where(e,r,o){return typeof e=="function"?this.andWhereGroup(e):typeof r=="function"&&o===void 0?this.andWhereSubQuery(e,"in",r):r instanceof O&&o===void 0?this.andWhereSubQuery(e,"in",r):typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||typeof o=="function")?this.andWhereSubQuery(e,r,o):this.andWhere(e,r,o)}andWhere(e,r,o){if(typeof e=="function")return this.andWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(r instanceof O&&o===void 0)return this.andWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(e,"and",false,n,s)),this}orWhere(e,r,o){if(typeof e=="function")return this.orWhereGroup(e);if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(r instanceof O&&o===void 0)return this.orWhereSubQuery(e,"in",r);if(typeof r=="string"&&r!=="="&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(e,"or",false,n,s)),this}whereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof O&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(e,"and",true,n,s)),this}andWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(r instanceof O&&o===void 0)return this.andWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.andWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(e,"and",true,n,s)),this}orWhereNot(e,r,o){if(typeof r=="function"&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(r instanceof O&&o===void 0)return this.orWhereSubQuery(e,"not in",r);if(typeof r=="string"&&o!==void 0&&(o instanceof O||typeof o=="function"))return this.orWhereSubQuery(e,r,o);let n="=",s;return typeof r=="string"&&o!==void 0&&!(o instanceof O)&&typeof o!="function"?(n=r,s=o):(s=r,n="="),this.whereNodes.push(new v(e,"or",true,n,s)),this}whereBetween(e,r,o){return this.andWhereBetween(e,r,o)}andWhereBetween(e,r,o){return this.whereNodes.push(new v(e,"and",false,"between",[r,o])),this}orWhereBetween(e,r,o){return this.whereNodes.push(new v(e,"or",false,"between",[r,o])),this}whereNotBetween(e,r,o){return this.andWhereNotBetween(e,r,o)}andWhereNotBetween(e,r,o){return this.whereNodes.push(new v(e,"and",true,"between",[r,o])),this}orWhereNotBetween(e,r,o){return this.whereNodes.push(new v(e,"or",true,"between",[r,o])),this}whereLike(e,r){return this.andWhereLike(e,r)}andWhereLike(e,r){return this.where(e,"like",r),this}orWhereLike(e,r){return this.orWhere(e,"like",r),this}whereILike(e,r){return this.andWhereILike(e,r)}andWhereILike(e,r){return this.where(e,"ilike",r),this}orWhereILike(e,r){return this.orWhere(e,"ilike",r),this}whereNotLike(e,r){return this.andWhereNotLike(e,r)}andWhereNotLike(e,r){return this.where(e,"not like",r),this}orWhereNotLike(e,r){return this.orWhere(e,"not like",r),this}whereNotILike(e,r){return this.andWhereNotILike(e,r)}andWhereNotILike(e,r){return this.where(e,"not ilike",r),this}orWhereNotILike(e,r){return this.orWhere(e,"not ilike",r),this}whereIn(e,r){return this.andWhereIn(e,r)}andWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"and",false,"in",r)),this):(this.whereNodes.push(new v("false","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"in",r)}orWhereIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"or",false,"in",r)),this):(this.whereNodes.push(new v("false","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"in",r)}whereNotIn(e,r){return this.andWhereNotIn(e,r)}andWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"and",true,"in",r)),this):(this.whereNodes.push(new v("true","and",true,"=",[],true)),this):this.andWhereSubQuery(e,"not in",r)}orWhereNotIn(e,r){return Array.isArray(r)?r.length?(this.whereNodes.push(new v(e,"or",true,"in",r)),this):(this.whereNodes.push(new v("true","or",true,"=",[],true)),this):this.orWhereSubQuery(e,"not in",r)}whereNull(e){return this.andWhereNull(e)}andWhereNull(e){return this.whereNodes.push(new v(e,"and",false,"is null",void 0)),this}orWhereNull(e){return this.whereNodes.push(new v(e,"or",false,"is null",void 0)),this}whereNotNull(e){return this.andWhereNotNull(e)}andWhereNotNull(e){return this.whereNodes.push(new v(e,"and",false,"is not null",void 0)),this}orWhereNotNull(e){return this.whereNodes.push(new v(e,"or",false,"is not null",void 0)),this}whereRegexp(e,r){return this.andWhereRegexp(e,r)}andWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new v(e,"and",false,o?"~":"regexp",r.source)),this}orWhereRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres"||this.sqlDataSource.getDbType()==="cockroachdb";return this.whereNodes.push(new v(e,"or",false,o?"~":"regexp",r.source)),this}whereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"and",true,o?"~":"regexp",r.source)),this}andWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"and",true,o?"~":"regexp",r.source)),this}orWhereNotRegexp(e,r){let o=this.sqlDataSource.getDbType()==="postgres";return this.whereNodes.push(new v(e,"or",true,o?"~":"regexp",r.source)),this}whereExists(e){return this.andWhereExists(e)}andWhereExists(e){let r=e instanceof O?e:new O(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Me("","exists",r.extractQueryNodes(),"and")),this}orWhereExists(e){let r=e instanceof O?e:new O(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Me("","exists",r.extractQueryNodes(),"or")),this}whereNotExists(e){return this.andWhereNotExists(e)}andWhereNotExists(e){let r=e instanceof O?e:new O(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Me("","not exists",r.extractQueryNodes(),"and")),this}orWhereNotExists(e){let r=e instanceof O?e:new O(this.model,this.sqlDataSource);return r.isNestedCondition=true,typeof e=="function"&&e(r),this.whereNodes.push(new Me("","not exists",r.extractQueryNodes(),"or")),this}whereRaw(e,r=[]){return this.andWhereRaw(e,r)}andWhereRaw(e,r=[]){return this.whereNodes.push(new v(e,"and",false,"=",r,true)),this}orWhereRaw(e,r=[]){return this.whereNodes.push(new v(e,"or",false,"=",r,true)),this}having(e,r,o){return this.andHaving(e,r,o)}andHaving(e,r,o){let n="=",s;return typeof r=="string"&&o?(n=r,s=o):(s=r,n="="),this.havingNodes.push(new 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 O)return e;let r=new O(this.model,this.sqlDataSource);return e(r),r}andWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new Me(e,r,n.extractQueryNodes(),"and")),this}orWhereSubQuery(e,r,o){let n=this.buildSubQuery(o);return this.whereNodes.push(new Me(e,r,n.extractQueryNodes(),"or")),this}andWhereGroup(e){let r=new O(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new ut(r.whereNodes,"and");return this.whereNodes.push(o),this}orWhereGroup(e){let r=new O(this.model,this.sqlDataSource);r.isNestedCondition=true,e(r);let o=new ut(r.whereNodes,"or");return this.whereNodes.push(o),this}};var Sr=class extends qr{whereJson(t,e){return this.andWhereJson(t,e)}andWhereJson(t,e){return this.whereNodes.push(new te(t,"and",false,"contains",e)),this}orWhereJson(t,e){return this.whereNodes.push(new te(t,"or",false,"contains",e)),this}whereJsonNotContains(t,e){return this.andWhereJsonNotContains(t,e)}andWhereJsonNotContains(t,e){return this.whereNodes.push(new te(t,"and",true,"not contains",e)),this}orWhereJsonNotContains(t,e){return this.whereNodes.push(new te(t,"or",true,"not contains",e)),this}whereJsonContains(t,e){return this.andWhereJsonContains(t,e)}andWhereJsonContains(t,e){return this.whereNodes.push(new te(t,"and",false,"contains",e)),this}orWhereJsonContains(t,e){return this.whereNodes.push(new te(t,"or",false,"contains",e)),this}whereNotJson(t,e){return this.andWhereNotJson(t,e)}andWhereNotJson(t,e){return this.whereNodes.push(new te(t,"and",true,"not contains",e)),this}orWhereNotJson(t,e){return this.whereNodes.push(new te(t,"or",true,"not contains",e)),this}whereJsonRaw(t,e){return this.andWhereJsonRaw(t,e)}andWhereJsonRaw(t,e){return this.whereNodes.push(new te(t,"and",false,"raw",e)),this}orWhereJsonRaw(t,e){return this.whereNodes.push(new te(t,"or",false,"raw",e)),this}};var O=class i extends Sr{constructor(e,r=Ae.instance){super(e,r);this.isNestedCondition=false;this.mustRemoveAnnotations=false;this.insertNode=null;this.onDuplicateNode=null;this.updateNode=null;this.deleteNode=null;this.truncateNode=null;this.replicationMode=null;this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),insert:this.insertWithPerformance.bind(this),insertMany:this.insertManyWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.dbType=r.getDbType(),this.isNestedCondition=false,this.model=e,this.unionNodes=[],this.lockQueryNodes=[],this.withNodes=[],this.astParser=new b(this.model,this.dbType),this.interpreterUtils=new f(this.model);}setReplicationMode(e){return this.replicationMode=e,this}async exists(){return !!await this.one()}async many(){let{sql:e,bindings:r}=this.unWrap();return this.execSqlWithSlaveHandling("read",o=>j(e,r,o,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"fetch"}}))}async pluck(e){return (await this.many()).map(o=>o[e])}async one(){let e=await this.limit(1).many();return !e||!e.length?null:e[0]}async first(){return this.one()}async oneOrFail(){let e=await this.one();if(!e)throw new T("SqlDataSource::query::oneOrFail","ROW_NOT_FOUND");return e}async firstOrFail(){return this.oneOrFail()}async stream(e={}){let{sql:r,bindings:o}=this.unWrap();return this.execSqlWithSlaveHandling("read",async n=>await pr(r,o,n,e,{onData:(a,l)=>{a.write(l);}}))}async*chunk(e){let r=0;for(;;){let o=await this.limit(e).offset(r).many();if(!o.length)break;r+=o.length,yield o;}}async paginateWithCursor(e,r,o){let n=this.clone();this.orderByNodes.length||this.orderBy(r.discriminator,r.orderBy||"asc"),o&&this.where(o.key,r.operator||">",o.value),this.limit(e);let s=await this.many(),a=await n.getCount(),l=s[s.length-1],d=l?l[r.discriminator]:null;return [{paginationMetadata:Fc(e,a),data:s},{key:r.discriminator,value:d}]}selectSubQuery(e,r){if(typeof e=="function"){let o=new i(this.model,this.sqlDataSource);return e(o),this.selectNodes.push(new X(o.extractQueryNodes(),r)),this}return this.selectNodes.push(new X(e.extractQueryNodes(),r)),this}lockForUpdate(e={}){return this.lockQueryNodes.push(new mt("for_update",e.skipLocked,e.noWait)),this}forShare(e={}){return this.lockQueryNodes.push(new mt("for_share",e.skipLocked,e.noWait)),this}union(e){if(typeof e=="string")return this.unionNodes.push(new Ee(e)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ee(o)),this}unionAll(e){if(typeof e=="string")return this.unionNodes.push(new Ee(e,true)),this;let o=(e instanceof i?e:e(new i(this.model,this.sqlDataSource))).extractQueryNodes();return this.unionNodes.push(new Ee(o,true)),this}async increment(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} + ${r}`)})}async decrement(e,r=1){return this.update({[e]:this.sqlDataSource.rawStatement(`${e} - ${r}`)})}async getCount(e="*"){this.clearForFunctions(),this.annotate("count",e,"total");let r=await this.one();return r?Ge(r.total):0}async getMax(e){this.clearForFunctions(),this.annotate("max",e,"total");let r=await this.one();return r?Ge(r.total):0}async getMin(e){this.clearForFunctions(),this.annotate("min",e,"total");let r=await this.one();return r?Ge(r.total):0}async getAvg(e){this.clearForFunctions(),this.annotate("avg",e,"total");let r=await this.one();return r?Ge(r.total):0}async getSum(e){this.clearForFunctions(),this.annotate("sum",e,"total");let r=await this.one();return r?Ge(r.total):0}async paginate(e,r){(typeof e!="number"||typeof r!="number")&&g.warn(`${this.model.name}::paginate Non numeric values provided to \`paginate\``);let o=this.clone(),n=this.limit(r).offset((e-1)*r),[s,a]=await this.executePaginateQueries(()=>n.many(),()=>o.getCount("*"));return {paginationMetadata:fr(e,r,a),data:s}}from(e,r){if(typeof e=="function"){if(!r)throw new T("QueryBuilder::from","MISSING_ALIAS_FOR_SUBQUERY");let o=new i(this.model,this.sqlDataSource);e(o);let n=o.extractQueryNodes();return this.fromNode=new L(n,r),this}return this.fromNode=new L(e,r),this}with(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new Je("normal",e,n)),this}withRecursive(e,r){let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new Je("recursive",e,n)),this}withMaterialized(e,r){if(this.dbType!=="postgres"&&this.dbType!=="cockroachdb")throw new T("QueryBuilder::withMaterialized","MATERIALIZED_CTE_NOT_SUPPORTED",new Error("MATERIALIZED CTE is only supported by postgres"));let o=new i(this.model,this.sqlDataSource);r(o);let n=o.extractQueryNodes();return this.withNodes.push(new Je("materialized",e,n)),this}async insert(e,r){let{columns:o,values:n}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),s=Object.fromEntries(o.map((u,c)=>[u,n[c]]));this.insertNode=new W(this.fromNode,[s],r);let{sql:a,bindings:l}=this.astParser.parse([this.insertNode]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[e]}});return Array.isArray(m)&&m.length?m[0]:m}async insertMany(e,r){if(!e.length)return [];let o=await Promise.all(e.map(async l=>{let{columns:d,values:m}=await this.interpreterUtils.prepareColumns(Object.keys(l),Object.values(l),"insert");return Object.fromEntries(d.map((u,c)=>[u,m[c]]))}));this.insertNode=new W(this.fromNode,o,r);let{sql:n,bindings:s}=this.astParser.parse([this.insertNode]),a=await this.getSqlDataSource("write");return j(n,s,a,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:o}})}async upsert(e,r,o={updateOnConflict:true}){let n=Object.keys(e),s=Object.keys(r),{columns:a,values:l}=await this.interpreterUtils.prepareColumns(Object.keys(e),Object.values(e),"insert"),d=Object.fromEntries(a.map((y,h)=>[y,l[h]]));if(this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw([d],s,n,o,[e]);let{sql:m,bindings:u}=this.astParser.parse([new W(new L(this.model.table),[d],void 0,true),new ae(this.model.table,s,n,o.updateOnConflict??true?"update":"ignore",o.returning)]),c=await this.getSqlDataSource("write"),p=await j(m,u,c,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:[e]}});return Array.isArray(p)?p:[p]}async upsertMany(e,r,o,n={updateOnConflict:true}){let s=[];if(await Promise.all(o.map(async u=>{let{columns:c,values:p}=await this.interpreterUtils.prepareColumns(Object.keys(u),Object.values(u),"insert"),y=Object.fromEntries(c.map((h,N)=>[h,p[N]]));s.push(y);})),this.sqlDataSource.type==="mssql")return this.executeMssqlMergeRaw(s,e,r,n,o);let{sql:a,bindings:l}=this.astParser.parse([new W(new L(this.model.table),s,void 0,true),new ae(this.model.table,e,r,n.updateOnConflict??true?"update":"ignore",n.returning)]),d=await this.getSqlDataSource("write"),m=await j(a,l,d,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:o}});return Array.isArray(m)?m:[m]}async executeMssqlMergeRaw(e,r,o,n,s){if(!e.length)return [];let a=Object.keys(e[0]),l=this.interpreterUtils.formatStringColumn("mssql",this.model.table),d=E=>this.interpreterUtils.formatStringColumn("mssql",E),m=[],u=e.map(E=>`select ${a.map(x=>(m.push(E[x]),`@${m.length}`)).join(", ")}`),c=a.map(d).join(", "),p=u.join(" union all "),y=r.map(E=>`target.${d(E)} = source.${d(E)}`).join(" and "),h=o.filter(E=>!r.includes(E)).map(E=>`target.${d(E)} = source.${d(E)}`).join(", "),N=a.map(d).join(", "),M=a.map(E=>`source.${d(E)}`).join(", "),$=n.returning&&n.returning.length?n.returning.map(E=>`inserted.${d(E)}`).join(", "):a.map(E=>`inserted.${d(E)}`).join(", "),C=(n.updateOnConflict??true)&&h?`when matched then update set ${h}`:"",D=`merge into ${l} as target using (${p}) as source (${c}) on ${y} ${C} when not matched then insert (${N}) values (${M}) output ${$};`,A=await this.getSqlDataSource("write"),S=await j(D,m,A,this.dbType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:s}});return Array.isArray(S)?S:[S]}async update(e){let r=Object.keys(e),o=Object.values(e),{columns:n,values:s}=await this.interpreterUtils.prepareColumns(r,o,"update");this.updateNode=new ee(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async truncate(){this.truncateNode=new he(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.truncateNode]),o=await this.getSqlDataSource("write");await j(e,r,o,this.dbType,"rows");}async delete(){this.deleteNode=new ge(this.fromNode);let{sql:e,bindings:r}=this.astParser.parse([this.deleteNode,...this.whereNodes,...this.joinNodes]),o=await this.getSqlDataSource("write");return j(e,r,o,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}async softDelete(e={}){let{column:r="deletedAt",value:o=ue()}=e||{},{columns:n,values:s}=await this.interpreterUtils.prepareColumns([r],[o],"update");this.updateNode=new ee(this.fromNode,n,s);let{sql:a,bindings:l}=this.astParser.parse([this.updateNode,...this.whereNodes,...this.joinNodes]),d=await this.getSqlDataSource("write");return j(a,l,d,this.dbType,"affectedRows",{sqlLiteOptions:{typeofModel:this.model,mode:"affectedRows"}})}toQuery(){let{sql:e,bindings:r}=this.unWrap();return Fa(e,r)}unWrap(){this.selectNodes.length||(this.selectNodes=[new X("*")]);let{sql:e,bindings:r}=this.astParser.parse(this.extractQueryNodes()),o=$t(this.sqlDataSource,e);return {sql:this.withQuery?`${this.withQuery} ${o}`:o,bindings:[...r||[]]}}clone(){let e=new i(this.model,this.sqlDataSource);return e.dbType=this.dbType,e.modelSelectedColumns=F(this.modelSelectedColumns),e.modelAnnotatedColumns=F(this.modelAnnotatedColumns),e.distinctNode=F(this.distinctNode),e.distinctOnNode=F(this.distinctOnNode),e.selectNodes=F(this.selectNodes),e.withQuery=F(this.withQuery),e.joinNodes=F(this.joinNodes),e.whereNodes=F(this.whereNodes),e.groupByNodes=F(this.groupByNodes),e.havingNodes=F(this.havingNodes),e.orderByNodes=F(this.orderByNodes),e.lockQueryNodes=F(this.lockQueryNodes),e.unionNodes=F(this.unionNodes),e.withNodes=F(this.withNodes),e.fromNode=F(this.fromNode),e.limitNode=F(this.limitNode),e.offsetNode=F(this.offsetNode),e.isNestedCondition=this.isNestedCondition,e.mustRemoveAnnotations=this.mustRemoveAnnotations,e}clear(){let e=new i(this.model,this.sqlDataSource);return this.fromNode.alias&&e.from(e.model.table,this.fromNode.alias),e}clearLockQuery(){return this.lockQueryNodes=[],this}clearUnionQuery(){return this.unionNodes=[],this}clearWithQuery(){return this.withNodes=[],this}extractQueryNodes(){return this.selectNodes.length||(this.selectNodes=[new X("*")]),this.insertNode?[this.insertNode,this.onDuplicateNode].filter(Boolean):this.updateNode?[this.updateNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.deleteNode?[this.deleteNode,...this.whereNodes,...this.joinNodes,...this.orderByNodes,this.limitNode].filter(Boolean):this.truncateNode?[this.truncateNode]:[...this.withNodes,this.distinctNode,this.distinctOnNode,...this.selectNodes,this.fromNode,...this.joinNodes,...this.whereNodes,...this.groupByNodes,...this.havingNodes,...this.orderByNodes,this.limitNode,this.offsetNode,...this.lockQueryNodes,...this.unionNodes].filter(Boolean)}clearForFunctions(){return this.clearSelect(),this.clearGroupBy(),this.clearOrderBy(),this.clearLimit(),this.clearOffset(),this}async manyWithPerformance(e="millis"){let[r,o]=await B(this.many.bind(this),e)();return {data:o,time:Number(r)}}async oneWithPerformance(e="millis"){let[r,o]=await B(this.one.bind(this),e)();return {data:o,time:Number(r)}}async firstWithPerformance(e="millis"){return this.oneWithPerformance(e)}async firstOrFailWithPerformance(e="millis"){return this.oneOrFailWithPerformance(e)}async paginateWithPerformance(e,r,o="millis"){let[n,s]=await B(this.paginate.bind(this,e,r),o)();return {data:s,time:Number(n)}}async paginateWithCursorWithPerformance(e,r,o,n="millis"){let[s,a]=await B(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async oneOrFailWithPerformance(e="millis"){let[r,o]=await B(this.oneOrFail.bind(this),e)();return {data:o,time:Number(r)}}async existsWithPerformance(e="millis"){let[r,o]=await B(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await B(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r="millis"){let[o,n]=await B(this.update.bind(this,e),r)();return {data:n,time:Number(o)}}async insertWithPerformance(e,r="millis"){let[o,n]=await B(this.insert.bind(this,e),r)();return {data:n,time:Number(o)}}async insertManyWithPerformance(e,r="millis"){let[o,n]=await B(this.insertMany.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await B(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async deleteWithPerformance(e="millis"){let[r,o]=await B(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await B(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}isMssqlTransaction(){return this.sqlDataSource.type==="mssql"&&!!this.sqlDataSource.sqlConnection}async executePaginateQueries(e,r){if(this.isMssqlTransaction()){let o=await e(),n=await r();return [o,n]}return Promise.all([e(),r()])}async getSqlDataSource(e){return this.replicationMode?this.replicationMode==="master"?this.sqlDataSource:e==="write"?this.sqlDataSource:this.sqlDataSource.getSlave()||this.sqlDataSource:e==="read"?this.sqlDataSource.getSlave()||this.sqlDataSource:this.sqlDataSource}async execSqlWithSlaveHandling(e,r){let o=await this.getSqlDataSource(e);if(!(o!==this.sqlDataSource))return r(o);try{return await r(o)}catch(s){let a=s instanceof Error?s:new Error(String(s)),l=this.sqlDataSource.getOnSlaveServerFailure();if(l)return await l(a,{host:o.host,port:o.port,username:o.username,password:o.password,database:o.database,type:o.getDbType()}),await r(this.sqlDataSource);throw a}}};var ze=class i extends O{constructor(e,r){super(e,r);this.performance={many:this.manyWithPerformance.bind(this),one:this.oneWithPerformance.bind(this),oneOrFail:this.oneOrFailWithPerformance.bind(this),first:this.firstWithPerformance.bind(this),firstOrFail:this.firstOrFailWithPerformance.bind(this),paginate:this.paginateWithPerformance.bind(this),exists:this.existsWithPerformance.bind(this),paginateWithCursor:this.paginateWithCursorWithPerformance.bind(this),truncate:this.truncateWithPerformance.bind(this),delete:this.deleteWithPerformance.bind(this),update:this.updateWithPerformance.bind(this),softDelete:this.softDeleteWithPerformance.bind(this),pluck:this.pluckWithPerformance.bind(this)};this.sqlModelManagerUtils=new pt(e,this.dbType,r),this.relationQueryBuilders=[],this.modelSelectedColumns=[],this.modelColumnsMap=new Map,this.modelColumnsDatabaseNames=new Map,this.model.getColumns().forEach(n=>{this.modelColumnsMap.set(n.databaseName,n),this.modelColumnsDatabaseNames.set(n.databaseName,n.columnName);});}get isRelationQueryBuilder(){return !!this.relation}static from(e,r={}){return r.connection?new i(e,r.connection):r.trx?new i(e,r.trx.sql):new i(e,e.sqlInstance)}async one(e={}){let r=await this.limit(1).many(e);return !r||!r.length?null:r[0]}async first(e){return this.one(e)}async oneOrFail(e){let r=await this.one(e);if(!r)throw new T(this.model.name+"::oneOrFail","ROW_NOT_FOUND");return r}async firstOrFail(e){return this.oneOrFail(e)}async many(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let o=(await super.many()).map(a=>this.addAdditionalColumnsToModel(a,this.model));if(!o.length)return [];let n=await ce(o,this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);if(!n)return [];let s=Array.isArray(n)?n:[n];return e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.(s),this.relationQueryBuilders.length&&await this.processRelationsRecursively(s),s}async*chunk(e,r={}){let o=0;for(;;){let n=await this.limit(e).offset(o).many(r);if(!n.length)break;yield n,o+=n.length;}}async stream(e={}){!e.ignoreHooks?.includes("beforeFetch")&&await this.model.beforeFetch?.(this);let{sql:r,bindings:o}=this.unWrap(),n=await this.getSqlDataSource("read");return await pr(r,o,n,e,{onData:async(a,l)=>{let d=this.addAdditionalColumnsToModel(l,this.model),m=await ce([d],this.model,this.modelSelectedColumns,this.modelAnnotatedColumns,this.mustRemoveAnnotations);m&&(e.ignoreHooks?.includes("afterFetch")||await this.model.afterFetch?.([m]),this.relationQueryBuilders.length&&await this.processRelationsRecursively([m]),a.write(m));}})}async paginateWithCursor(e,r,o){if(!r){if(!this.model.primaryKey)throw new T(this.model.name+"::paginateWithCursor","PRIMARY_KEY_NOT_FOUND");r={discriminator:this.model.primaryKey};}return super.paginateWithCursor(e,r,o)}async insert(...e){return this.model.insert(...e)}async insertMany(...e){return this.model.insertMany(...e)}async update(e,r={}){return r.ignoreBeforeUpdateHook||await this.model.beforeUpdate?.(this),super.update(e)}async softDelete(e={}){let{ignoreBeforeUpdateHook:r=false}=e||{};return !r&&await this.model.beforeUpdate?.(this),super.softDelete(e)}async delete(e={}){return e.ignoreBeforeDeleteHook||await this.model.beforeDelete?.(this),super.delete()}async getCount(e="*",r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("count",e,"total");let o=r.ignoreHooks?["beforeFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMax(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("max",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getMin(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("min",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getAvg(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("avg",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async getSum(e,r={ignoreHooks:false}){this.clearForFunctions(),this.annotate("sum",e,"total");let o=r.ignoreHooks?["beforeFetch","afterFetch"]:[],n=await this.one({ignoreHooks:o});return n?+n.$annotations.total:0}async paginate(e,r,o={ignoreHooks:false}){let n=this.clone(),s=this.limit(r).offset((e-1)*r),a=o.ignoreHooks?["beforeFetch","afterFetch"]:[],[l,d]=await this.executePaginateQueries(()=>s.many({ignoreHooks:a}),()=>n.getCount("*",{ignoreHooks:o.ignoreHooks}));return {paginationMetadata:fr(e,r,d),data:l}}select(...e){return this.modelSelectedColumns=[...this.modelSelectedColumns,...e],this.selectNodes=this.selectNodes.concat(e.map(r=>new X(r))),this}annotate(e,r,o){let n,s,a;return o?(n=e,s=r,a=o):(n=void 0,s=e,a=r),this.selectNodes=this.selectNodes.concat(new X(s,a,n)),this.modelAnnotatedColumns.push(a),this}removeAnnotations(){return this.mustRemoveAnnotations=true,this.modelAnnotatedColumns=[],this}load(e,r){let o=this.sqlModelManagerUtils.getRelationFromModel(e),n=new i(o.model,this.sqlDataSource);return n.relation=o,r?.(n),this.relationQueryBuilders.push(n),this}clearRelations(){return this.relationQueryBuilders=[],this}havingRelated(e,r,o){return this.andHavingRelated(e,r,o)}andHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereExists(m),this}orHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereExists(m),this}notHavingRelated(e,r,o){return this.andNotHavingRelated(e,r,o)}andNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.whereNotExists(m),this}orNotHavingRelated(e,r,o){let n,s,a;typeof r=="function"?a=r:typeof r=="string"&&o!==void 0?(s=r,n=o):r!==void 0&&(n=r,s="=");let l=this.sqlModelManagerUtils.getRelationFromModel(e),d=new i(l.model,this.sqlDataSource);d.relation=l;let m=this.getRelatedModelsQueryForRelation(d,l,[]);return m.clearWhere(),m.clearSelect(),m.selectRaw("1"),a?.(m),this.applyHavingRelatedFilter(m,l,s,n),this.orWhereNotExists(m),this}clone(){let e=super.clone();return e.relationQueryBuilders=F(this.relationQueryBuilders),e}async processRelationsRecursively(e){await Promise.all(this.relationQueryBuilders.filter(r=>r.isRelationQueryBuilder).map(async r=>{let o=await this.getRelatedModelsForRelation(r,r.relation,e);this.mapRelatedModelsToModels(r.relation,e,o);}));}mapRelatedModelsToModels(e,r,o){switch(e.type){case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasOne","MODEL_HAS_NO_PRIMARY_KEY");let n=new Map;o.forEach(c=>{let p=c[e.foreignKey];p&&n.set(String(p),c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=null;return}let y=n.get(String(p));c[e.columnName]=y||null;});break;case "belongsTo":let s=new Map;o.forEach(c=>{if(!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::belongsTo",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${e.model.name}`);let p=c[e.model.primaryKey];p&&s.set(String(p),c);}),r.forEach(c=>{let p=c[e.foreignKey];if(!p){c[e.columnName]=null;return}let y=s.get(String(p));c[e.columnName]=y||null;});break;case "hasMany":if(!this.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::hasMany","MODEL_HAS_NO_PRIMARY_KEY");let a=new Map;o.forEach(c=>{let p=c[e.foreignKey];if(!p)return;let y=String(p);a.has(y)||a.set(y,[]),a.get(y).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=a.get(String(p))||[];c[e.columnName]=y;});break;case "manyToMany":if(!this.model.primaryKey||!e.model.primaryKey)throw new T(this.model.name+"::mapRelatedModelsToModels::manyToMany","MODEL_HAS_NO_PRIMARY_KEY");let l=e,d=new Map,m=l.leftForeignKey,u=this.modelColumnsMap.get(m)||this.modelColumnsDatabaseNames.get(m)||k(m,this.model.modelCaseConvention);o.forEach(c=>{let p=c.$annotations||{},y=p[u];if(y==null)return;let h=String(y);d.has(h)||d.set(h,[]),this.modelAnnotatedColumns.includes(u)||(delete p[u],Object.keys(p).length||delete c.$annotations),d.get(h).push(c);}),r.forEach(c=>{let p=c[this.model.primaryKey];if(!p){c[e.columnName]=[];return}let y=d.get(String(p))||[];c[e.columnName]=y;});break;default:throw new T(this.model.name+"::mapRelatedModelsToModels","UNSUPPORTED_RELATION_TYPE")}}async getRelatedModelsForRelation(e,r,o){return this.getRelatedModelsQueryForRelation(e,r,o).many()}getRelatedModelsQueryForRelation(e,r,o){let n=this.getFilterValuesFromModelsForRelation(r,o);switch(r.type){case "belongsTo":case "hasOne":return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);case "hasMany":let s=e.limitNode?.limit,a=e.offsetNode?.offset;if(!s&&!a)return e.whereIn(e.relation.type==="belongsTo"?r.model.primaryKey:r.foreignKey,n);let l=Ne__default.default.randomBytes(6).toString("hex"),d=`${r.model.table}_cte_${l}`,m=e.orderByNodes.map(S=>S.isRawValue?S.column:`${this.interpreterUtils.formatStringColumn(this.dbType,S.column)} ${S.direction}`).join(", ")||["1"];e.clearLimit(),e.clearOffset();let u=e.with(d,S=>S.select(...e.modelSelectedColumns).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${this.interpreterUtils.formatStringColumn(this.dbType,r.foreignKey)} ORDER BY ${m}) as rn_${l}`).whereIn(r.foreignKey,n));s&&u.whereRaw(`rn_${l} <= ${s+(a||0)}`),a&&u.whereRaw(`rn_${l} > ${a}`);let c=e.modelSelectedColumns.map(S=>Jr(S,d,e.model.table));return u.select(...c).from(d);case "manyToMany":if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::getRelatedModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");let p=r;if(!o.length)return e;let y=e.limitNode?.limit,h=e.offsetNode?.offset,N=e.modelSelectedColumns.length?e.modelSelectedColumns.map(S=>S.includes(".")?S:`${r.model.table}.${S}`):[`${r.model.table}.*`];if(!y&&!h)return e.select(...N).annotate(`${p.throughModel}.${p.leftForeignKey}`,p.leftForeignKey).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n);let M=Ne__default.default.randomBytes(6).toString("hex"),$=`${r.model.table}_cte_${M}`,V=e.orderByNodes.map(S=>{if(S.isRawValue)return S.column;let E=S.column.includes(".")?S.column:`${r.model.table}.${S.column}`;return `${this.interpreterUtils.formatStringColumn(this.dbType,E)} ${S.direction}`}).join(", ")||["1"];e.clearLimit(),e.clearOffset(),e.clearOrderBy();let C=`${Ne__default.default.randomBytes(6).toString("hex")}_left_foreign_key`,D=e.with($,S=>S.select(...N).annotate(`${p.throughModel}.${p.leftForeignKey}`,C).selectRaw(`ROW_NUMBER() OVER (PARTITION BY ${p.throughModel}.${this.interpreterUtils.formatStringColumn(this.dbType,p.leftForeignKey)} ORDER BY ${V}) as rn_${M}`).leftJoin(p.throughModel,`${p.relatedModel}.${p.model.primaryKey}`,`${p.throughModel}.${p.rightForeignKey}`).whereIn(`${p.throughModel}.${p.leftForeignKey}`,n));y&&D.whereRaw(`rn_${M} <= ${y+(h||0)}`),h&&D.whereRaw(`rn_${M} > ${h}`);let A=N.map(S=>Jr(S,$,e.model.table));return D.select(...A).annotate(`${$}.${C}`,p.leftForeignKey).from($);default:throw new T(this.model.name+"::getRelatedModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}getFilterValuesFromModelsForRelation(e,r){switch(e.type){case "hasMany":case "hasOne":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);case "belongsTo":return r.map(o=>o[e.foreignKey]);case "manyToMany":if(!this.model.primaryKey)throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","MODEL_HAS_NO_PRIMARY_KEY");return r.map(o=>o[this.model.primaryKey]);default:throw new T(this.model.name+"::getFilterValuesFromModelsForRelation","UNSUPPORTED_RELATION_TYPE")}}applyHavingRelatedFilter(e,r,o,n){let s=new f(r.model),a=new f(this.model),l=this.dbType;switch(r.type){case "hasOne":case "hasMany":{if(!this.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");let d=s.formatStringColumn(l,`${r.model.table}.${r.foreignKey}`),m=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "belongsTo":{if(!r.model.primaryKey||!r.foreignKey)throw new T(this.model.name+"::applyHavingRelatedFilter",`RELATED_MODEL_DOES_NOT_HAVE_A_PRIMARY_KEY_${r.model.name}`);let d=s.formatStringColumn(l,`${r.model.table}.${r.model.primaryKey}`),m=a.formatStringColumn(l,`${this.model.table}.${r.foreignKey}`);e.whereRaw(`${d} = ${m}`),o&&typeof n=="number"&&e.groupByRaw(d).andHavingRaw(`count(*) ${o} ${n}`);return}case "manyToMany":{let d=r;if(!this.model.primaryKey||!r.model.primaryKey)throw new T(this.model.name+"::applyHavingRelatedFilter","MODEL_HAS_NO_PRIMARY_KEY");e.joinNodes?.some(p=>!p.isRawValue&&p.table===d.throughModel&&p.type==="left")||e.leftJoin(d.throughModel,`${d.relatedModel}.${r.model.primaryKey}`,`${d.throughModel}.${d.rightForeignKey}`);let u=a.formatStringColumn(l,`${d.throughModel}.${d.leftForeignKey}`),c=a.formatStringColumn(l,`${this.model.table}.${this.model.primaryKey}`);e.whereRaw(`${u} = ${c}`),o&&typeof n=="number"&&e.groupByRaw(u).andHavingRaw(`count(*) ${o} ${n}`);return}default:throw new T(this.model.name+"::applyHavingRelatedFilter","UNSUPPORTED_RELATION_TYPE")}}addAdditionalColumnsToModel(e,r){let o={},n={};return Object.entries(e).forEach(([s,a])=>{if(s==="$annotations"||this.modelColumnsDatabaseNames.get(s)){o[s]=a;return}n[k(s,r.modelCaseConvention)]=a;}),o.$annotations=n,o}async manyWithPerformance(e={},r="millis"){let[o,n]=await B(this.many.bind(this,e),r)();return {data:n,time:Number(o)}}async oneWithPerformance(e={},r="millis"){let[o,n]=await B(this.one.bind(this,e),r)();return {data:n,time:Number(o)}}async oneOrFailWithPerformance(e={},r="millis"){let[o,n]=await B(this.oneOrFail.bind(this,e),r)();return {data:n,time:Number(o)}}async firstOrFailWithPerformance(e={},r="millis"){return this.oneOrFailWithPerformance(e,r)}async firstWithPerformance(e={},r="millis"){return this.oneWithPerformance(e,r)}async paginateWithPerformance(e,r,o,n="millis"){let{ignoreHooks:s=false}=o||{},[a,l]=await B(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 B(this.paginateWithCursor.bind(this,e,r,o),n)();return {data:a,time:Number(s)}}async existsWithPerformance(e="millis"){let[r,o]=await B(this.exists.bind(this),e)();return {data:o,time:Number(r)}}async pluckWithPerformance(e,r="millis"){let[o,n]=await B(this.pluck.bind(this,e),r)();return {data:n,time:Number(o)}}async softDeleteWithPerformance(e={},r="millis"){let[o,n]=await B(this.softDelete.bind(this,e),r)();return {data:n,time:Number(o)}}async updateWithPerformance(e,r={},o="millis"){let[n,s]=await B(this.update.bind(this,e,r),o)();return {data:s,time:Number(n)}}async deleteWithPerformance(e="millis"){let[r,o]=await B(this.delete.bind(this),e)();return {data:o,time:Number(r)}}async truncateWithPerformance(e="millis"){let[r,o]=await B(this.truncate.bind(this),e)();return {data:o,time:Number(r)}}};var Mr=class extends ze{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new W(this.fromNode,[o],r?.returning),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new W(this.fromNode,o,r?.returning),this}update(...t){let[e]=t;return this.updateNode=new ee(this.fromNode,Object.keys(e),Object.values(e)),this}delete(...t){let[e]=t;return e?.ignoreBeforeDeleteHook||this.model.beforeDelete?.(this),this.deleteNode=new ge(this.fromNode),this}truncate(){return this.truncateNode=new he(this.fromNode),this}softDelete(...t){let[e]=t,{column:r="deletedAt",value:o=ue()}=e||{};return this.updateNode=new ee(this.fromNode,[r],[o]),this}};var ht=class{constructor(t,e){this.replicationMode=null;this.model=t,this.modelInstance=rl(),this.sqlDataSource=e,this.logs=this.sqlDataSource.logs,this.sqlType=this.sqlDataSource.getDbType(),this.astParser=new b(this.model,this.sqlType),this.interpreterUtils=new f(this.model);}setReplicationMode(t){return this.replicationMode=t,this}async find(t){if(!t)return this.query().many();let e=this.query();return t.select&&e.select(...t.select),t.relations&&t.relations.forEach(r=>{e.load(r);}),t.where&&Object.entries(t.where).forEach(([r,o])=>{if(Array.isArray(o)){e.whereIn(r,o);return}e.where(r,o);}),t.orderBy&&Object.entries(t.orderBy).forEach(([r,o])=>{e.orderBy(r,o);}),t.limit&&e.limit(t.limit),t.offset&&e.offset(t.offset),t.groupBy&&e.groupBy(...t.groupBy),e.many({ignoreHooks:t.ignoreHooks||[]})}async findOne(t){let e=await this.find({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset,limit:1});return e.length?e[0]:null}async findOneOrFail(t){let e=await this.findOne({groupBy:t.groupBy,orderBy:t.orderBy,relations:t.relations,select:t.select,where:t.where,ignoreHooks:t.ignoreHooks,offset:t.offset});if(e===null)throw t.customError?t.customError:new T(this.model.name+"::findOneOrFail","ROW_NOT_FOUND");return e}async findOneByPrimaryKey(t,e){if(!this.model.primaryKey)throw new T(this.model.name+"::findOneByPrimaryKey","MODEL_HAS_NO_PRIMARY_KEY");return this.query().select(...e||[]).where(this.model.primaryKey,t).one({ignoreHooks:["afterFetch","beforeFetch"]})}async insert(t,e={}){!e.ignoreHooks&&await this.model.beforeInsert?.(t);let{columns:r,values:o}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"insert"),n={};r.forEach((u,c)=>{let p=o[c];n[u]=p,t[u]??(t[u]=p);});let{sql:s,bindings:a}=this.astParser.parse([new W(new L(this.model.table),[n],e.returning)]),l=await j(s,a,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertOne",models:[t]}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return this.handleMysqlInsert(l,[t],"one",e.returning);let d=l[0];return d?(await this.model.afterFetch?.([d]),await ce([d],this.model)):t}async insertMany(t,e={}){if(await this.model.beforeInsertMany?.(t),this.sqlType==="oracledb"){let d=this.model.primaryKey,m=Object.keys(t[0]||{});if(d&&!m.includes(d))return this.handleOracleIdentityInsert(t,e)}let r=[];for(let d of t){let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c={};m.forEach((p,y)=>{let h=u[y];c[p]=h,d[p]??(d[p]=h);}),r.push(c);}let{sql:o,bindings:n}=this.astParser.parse([new W(new L(this.model.table),r,e.returning)]),s=await j(o,n,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"insertMany",models:t}});if(this.sqlType==="mysql"||this.sqlType==="mariadb")return await this.handleMysqlInsert(s,t,"many",e.returning)||[];let a=s;return a.length?(await this.model.afterFetch?.(a),await ce(a,this.model)||[]):[]}async upsertMany(t,e,r,o={updateOnConflict:true}){let n=[];if(await this.model.beforeInsertMany?.(r),await Promise.all(r.map(async d=>{let{columns:m,values:u}=await this.interpreterUtils.prepareColumns(Object.keys(d),Object.values(d),"insert"),c=Object.fromEntries(m.map((p,y)=>[p,u[y]]));n.push(c);})),this.sqlType==="mssql")return this.executeMssqlMerge(n,t,e,o,r);let{sql:s,bindings:a}=this.astParser.parse([new W(new L(this.model.table),n,void 0,true),new ae(this.model.table,t,e,o.updateOnConflict??true?"update":"ignore",o.returning)]);return await j(s,a,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:r}})}async executeMssqlMerge(t,e,r,o,n){if(!t.length)return [];let s=Object.keys(t[0]),a=this.interpreterUtils.formatStringColumn("mssql",this.model.table),l=A=>this.interpreterUtils.formatStringColumn("mssql",A),d=[],m=t.map(A=>`select ${s.map(E=>(d.push(A[E]),`@${d.length}`)).join(", ")}`),u=s.map(l).join(", "),c=m.join(" union all "),p=e.map(A=>`target.${l(A)} = source.${l(A)}`).join(" and "),y=r.filter(A=>!e.includes(A)).map(A=>`target.${l(A)} = source.${l(A)}`).join(", "),h=s.map(l).join(", "),N=s.map(A=>`source.${l(A)}`).join(", "),M=o.returning&&o.returning.length?o.returning.map(A=>`inserted.${l(A)}`).join(", "):s.map(A=>`inserted.${l(A)}`).join(", "),V=(o.updateOnConflict??true)&&y?`when matched then update set ${y}`:"",C=`merge into ${a} as target using (${c}) as source (${u}) on ${p} ${V} when not matched then insert (${h}) values (${N}) output ${M};`;return await j(C,d,this.sqlDataSource,this.sqlType,"rows",{sqlLiteOptions:{typeofModel:this.model,mode:"raw",models:n}})}async updateRecord(t,e){let{columns:r,values:o}=await this.interpreterUtils.prepareColumns(Object.keys(t),Object.values(t),"update"),{primaryKey:n}=this.model;if(!n)throw new T(this.model.name+"::updateRecord","MODEL_HAS_NO_PRIMARY_KEY");let s=r.indexOf(n);s!==-1&&(r.splice(s,1),o.splice(s,1));let{sql:a,bindings:l}=this.astParser.parse([new ee(new L(this.model.table),r,o),new v(n,"and",false,"=",t[n])]);await j(a,l,this.sqlDataSource,this.sqlType,"affectedRows");let d=await this.findOneByPrimaryKey(t[this.model.primaryKey],e?.returning??void 0);if(!d)throw new T(this.model.name+"::updateRecord","ROW_NOT_FOUND");return d}async deleteRecord(t){if(!this.model.primaryKey)throw new T(this.model.name+"::deleteRecord","MODEL_HAS_NO_PRIMARY_KEY");let e=new v(this.model.primaryKey,"and",false,"=",t[this.model.primaryKey]),{sql:r,bindings:o}=this.astParser.parse([new ge(new L(this.model.table)),e]);await j(r,o,this.sqlDataSource,this.sqlType,"affectedRows");}query(){let t=new ze(this.model,this.sqlDataSource);return this.replicationMode&&t.setReplicationMode(this.replicationMode),t}dryQuery(){return new Mr(this.model,this.sqlDataSource)}async handleMysqlInsert(t,e,r,o){if(!this.model.primaryKey){if(r==="one"){let a=e.length?e[0]:null;return a?await ce([a],this.model):null}return await ce(e,this.model)}if(this.model.primaryKey&&e[0][this.model.primaryKey]){let a=e.map(m=>m[this.model.primaryKey]),l=a.map(m=>`'${m}'`).join(","),d=await this.query().select(...o??"*").whereIn(this.model.primaryKey,a).orderByRaw(`FIELD(${this.model.primaryKey}, ${l})`).many();return r==="one"?d.length?d[0]:null:d}let n=Array.from({length:t.affectedRows},(a,l)=>l+t.insertId),s=await this.query().select(...o||"*").whereIn(this.model.primaryKey,n).many();return r==="one"?s.length?s[0]:null:s}async handleOracleIdentityInsert(t,e){let r=[],o=this.model.primaryKey;for(let n of t){let{columns:s,values:a}=await this.interpreterUtils.prepareColumns(Object.keys(n),Object.values(n),"insert"),l={};s.forEach((p,y)=>{let h=a[y];l[p]=h,n[p]??(n[p]=h);});let{sql:d,bindings:m}=this.astParser.parse([new W(new L(this.model.table),[l],e.returning)]);await j(d,m,this.sqlDataSource,this.sqlType,"rows");let u=this.query().select(...e.returning||["*"]);for(let[p,y]of Object.entries(l))y!=null&&p!==o&&u.where(p,"=",y);o&&u.orderBy(o,"desc");let c=await u.one({ignoreHooks:["beforeFetch"]});c?(o&&c[o]&&(n[o]=c[o]),r.push(c)):r.push(n);}return await this.model.afterFetch?.(r),r}};var _r=class extends O{constructor(t,e){super(t,e);}many(){return this}insert(...t){let[e,r]=t,o=Object.fromEntries(Object.keys(e).map(n=>[n,e[n]]));return this.insertNode=new W(this.fromNode,[o],r),this}insertMany(...t){let[e,r]=t;if(!e.length)return this;let o=e.map(n=>Object.fromEntries(Object.keys(n).map(s=>[s,n[s]])));return this.insertNode=new W(this.fromNode,o,r),this}upsert(...t){let[e,r,o]=t,n=Object.keys(e),s=Object.keys(r);return this.insertNode=new W(new L(this.model.table),[e],void 0,true),this.onDuplicateNode=new ae(this.model.table,s,n,o?.updateOnConflict??true?"update":"ignore",o?.returning),this}upsertMany(...t){let[e,r,o,n]=t,s=o.map(a=>Object.fromEntries(Object.keys(a).map(l=>[l,a[l]])));return this.insertNode=new W(new L(this.model.table),s,void 0,true),this.onDuplicateNode=new ae(this.model.table,e,r,n?.updateOnConflict??true?"update":"ignore",n?.returning),this}update(t){return this.updateNode=new ee(this.fromNode,Object.keys(t),Object.values(t)),this}delete(){return this.deleteNode=new ge(this.fromNode),this}truncate(){return this.truncateNode=new he(this.fromNode),this}softDelete(t={}){let{column:e="deletedAt",value:r=ue()}=t||{};return this.updateNode=new ee(this.fromNode,[e],[r]),this}};var Ma=(i,t)=>({table:i,modelCaseConvention:"preserve",databaseCaseConvention:t?.databaseCaseConvention??"preserve",softDeleteColumn:t?.softDeleteColumn??"deleted_at",softDeleteValue:t?.softDeleteValue??ue()});var gt=class i{constructor(t,e,r=false,o=0){this.connectionReleased=false;this.sql=t,this.isActive=false,this.transactionId=Ne__default.default.randomBytes(16).toString("hex"),this.isolationLevel=e,this.isNested=r,this.nestingDepth=o;}async nestedTransaction(t){let e=new i(this.sql,this.isolationLevel,true,this.nestingDepth+1);if(await e.startTransaction(),t)try{await t(e),await e.commit();}catch(r){throw await e.rollback(),r}return e}async startTransaction(){let t=this.getIsolationLevelQuery();if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`SAVE TRANSACTION ${e}`),this.isActive=true;return;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return;case "sqlite":await this.sql.rawQuery(`SAVEPOINT ${e}`),this.isActive=true;return}}switch(this.sql.type){case "mssql":t&&await this.sql.rawQuery(t),Z("BEGIN TRANSACTION",this.sql.logs);let e=await this.getMssqlTransactionLevel();await this.sql.sqlConnection.begin(e),this.isActive=true;break;case "mysql":case "mariadb":t&&await this.sql.rawQuery(t);let r=this.sql.sqlConnection;Z("BEGIN TRANSACTION",this.sql.logs),await r.beginTransaction(),this.isActive=true;break;case "postgres":case "cockroachdb":await this.sql.rawQuery("BEGIN TRANSACTION"),t&&await this.sql.rawQuery(t),this.isActive=true;break;case "sqlite":t&&await this.sql.rawQuery(t),await this.sql.rawQuery("BEGIN TRANSACTION"),this.isActive=true;break;case "oracledb":t&&await this.sql.rawQuery(t),this.isActive=true;break}}async commit(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::commit","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::commit - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":case "oracledb":break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "sqlite":await this.sql.rawQuery(`RELEASE SAVEPOINT ${e}`);break}this.isActive=!1;return}switch(this.sql.type){case "mssql":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("COMMIT",this.sql.logs),await e.commit();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("COMMIT");break;case "sqlite":await this.sql.rawQuery("COMMIT");break;case "oracledb":Z("COMMIT",this.sql.logs),await this.sql.sqlConnection.commit();break}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async rollback(t){if(!this.isActive){if(t?.throwErrorOnInactiveTransaction)throw new T("TRANSACTION::rollback","TRANSACTION_NOT_ACTIVE");g.warn("Transaction::rollback - TRANSACTION_NOT_ACTIVE");return}try{if(this.isNested){let e=this.getSavePointName();switch(this.sql.type){case "mssql":await this.sql.rawQuery(`ROLLBACK TRANSACTION ${e}`);break;case "mysql":case "mariadb":case "postgres":case "cockroachdb":case "oracledb":await this.sql.rawQuery(`ROLLBACK TO SAVEPOINT ${e}`);break;case "sqlite":await this.sql.rawQuery(`ROLLBACK TO ${e}`);break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}this.isActive=!1;return}switch(this.sql.type){case "mssql":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;case "mysql":case "mariadb":let e=this.sql.sqlConnection;Z("ROLLBACK",this.sql.logs),await e.rollback();break;case "postgres":case "cockroachdb":await this.sql.rawQuery("ROLLBACK");break;case "sqlite":await this.sql.rawQuery("ROLLBACK");break;case "oracledb":Z("ROLLBACK",this.sql.logs),await this.sql.sqlConnection.rollback();break;default:throw new T("TRANSACTION::rollback",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(e){throw g.error(e),e}await this.releaseConnection(),this.isActive=false;}async releaseConnection(){if(!this.connectionReleased){try{switch(this.sql.type){case "mssql":break;case "mysql":case "mariadb":this.sql.sqlConnection.release();break;case "postgres":case "cockroachdb":this.sql.sqlConnection.release();break;case "sqlite":break;case "oracledb":await this.sql.sqlConnection.close();break;default:throw new T("TRANSACTION::releaseConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}}catch(t){g.error(t);}await this.sql.closeConnection(),this.sql.sqlConnection=null,this.connectionReleased=true;}}getIsolationLevelQuery(){if(!this.isolationLevel||this.sql.type==="mssql")return "";if(this.sql.type==="sqlite"&&this.isolationLevel!=="SERIALIZABLE")throw new T("TRANSACTION::getIsolationLevelQuery","SQLITE_ONLY_SUPPORTS_SERIALIZABLE_ISOLATION_LEVEL");if(this.sql.type==="mysql"||this.sql.type==="mariadb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="postgres"||this.sql.type==="cockroachdb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="oracledb")return `SET TRANSACTION ISOLATION LEVEL ${this.isolationLevel}`;if(this.sql.type==="sqlite")return "";throw new T("TRANSACTION::getIsolationLevelQuery",`UNSUPPORTED_DATABASE_TYPE_${this.sql.type}`)}getSavePointName(){let t=this.transactionId.slice(0,8).toUpperCase();return `sp_${this.nestingDepth}_${t}`}async getMssqlTransactionLevel(){if(!this.isolationLevel)return;let t=await import('mssql').then(e=>e.default.ISOLATION_LEVEL).catch(e=>{throw g.error(e),new Q("mssql")});switch(this.isolationLevel){case "READ UNCOMMITTED":return t.READ_UNCOMMITTED;case "READ COMMITTED":return t.READ_COMMITTED;case "REPEATABLE READ":return t.REPEATABLE_READ;case "SERIALIZABLE":return t.SERIALIZABLE;default:throw new T("TRANSACTION::getMssqlTransactionLevel",`UNSUPPORTED_ISOLATION_LEVEL_${this.isolationLevel}`)}}};var le,_e=class _e extends Dt{constructor(e){super(e);this.globalTransaction=null;this.ownsPool=false;this.roundRobinIndex=0;this.sqlConnection=null;this.cacheAdapter=new Pt;this.migrationConfig={path:R.MIGRATION_PATH||"database/migrations",lock:true,transactional:true,lockTimeout:3e4};this.seederConfig={path:"database/seeders"};this.sqlType=e?.type||this.type;let r=e;this.inputDetails={...e,type:this.sqlType,host:r?.host??this.host,port:r?.port??this.port,username:r?.username??this.username,password:r?.password??this.password,database:r?.database??this.database,logs:r?.logs??this.logs},this.inputDetails.connectionPolicies=e?.connectionPolicies||{retry:{maxRetries:0,delay:0}},this.inputDetails.queryFormatOptions=e?.queryFormatOptions||{language:Kr(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 _e(o)),this.slaveAlgorithm=e?.replication?.slaveAlgorithm||"roundRobin",this.onSlaveServerFailure=e?.replication?.onSlaveServerFailure;}getOnSlaveServerFailure(){return this.onSlaveServerFailure}static get instance(){if(!$e(this,le))throw new T("SqlDataSource::instance","CONNECTION_NOT_ESTABLISHED");return $e(this,le)}static async connectToSecondarySource(e,r){let o=new _e(e);await o.connectWithoutSettingPrimary();let n=o;return await r?.(n),n}static async useConnection(e,r){let o=new _e(e);await o.connectWithoutSettingPrimary();let n=o;try{await r(n),o.isConnected&&await o.closeConnection();}catch(s){throw o.isConnected&&await o.closeConnection(),s}}static async closeConnection(){if(!$e(this,le)){g.warn("Connection already closed");return}await $e(this,le).closeConnection(),$r(this,le,null);}static async disconnect(){return this.closeConnection()}static async startGlobalTransaction(e){return this.instance.startGlobalTransaction(e)}static async commitGlobalTransaction(){await this.instance.commitGlobalTransaction();}static async rollbackGlobalTransaction(){await this.instance.rollbackGlobalTransaction();}static get isInGlobalTransaction(){return !!$e(this,le)?.globalTransaction}async connect(){if($e(_e,le))throw new T("SqlDataSource::connect","CONNECTION_ALREADY_ESTABLISHED");this.sqlPool=await Oe(this.sqlType,this.inputDetails),this.ownsPool=true,this.slaves.length&&await Promise.all(this.slaves.map(async e=>{e.sqlPool=await Oe(e.sqlType,e.inputDetails),e.ownsPool=true;})),$r(_e,le,this);}get isConnected(){return !!this.sqlPool||!!this.sqlConnection}get isInGlobalTransaction(){return !!this.globalTransaction}get models(){return this._models}getSlave(){if(!this.slaves.length)return null;if(this.slaveAlgorithm==="random")return this.slaves[Math.floor(Math.random()*this.slaves.length)];let e=this.slaves[this.roundRobinIndex%this.slaves.length];return this.roundRobinIndex=(this.roundRobinIndex+1)%this.slaves.length,e}async useCache(e,r,...o){if(!this.cacheAdapter)throw new T("SqlDataSource::useCache","CACHE_ADAPTER_NOT_CONFIGURED");let n=this.cacheKeys[e];if(!n)throw new T("SqlDataSource::useCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);let s=n.length,a=typeof r=="number"&&s===o.length,l,d=[];a?(l=r,d=o):(l=void 0,d=r!==void 0?[r,...o]:o);let m=Br(JSON.stringify(d)),u=m?`${e}:${m}`:e,c=await this.cacheAdapter.get(u);if(c!==void 0)return c;let p=await n(...d);return await this.cacheAdapter.set(u,p,l),p}async invalidCache(e,...r){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidCache","CACHE_ADAPTER_NOT_CONFIGURED");let o=this.cacheKeys[e];if(!o)throw new T("SqlDataSource::invalidCache",`KEY_${e}_HAS_NO_HANDLER_IN_CACHE_KEYS_CONFIG`);if(o.length>0&&r.length===0){let l=e;await this.cacheAdapter.invalidate(l);return}let s=Br(JSON.stringify(r)),a=s?`${e}:${s}`:e;await this.cacheAdapter.invalidate(a);}async invalidateAllCache(e){if(!this.cacheAdapter)throw new T("SqlDataSource::invalidateAllCache","CACHE_ADAPTER_NOT_CONFIGURED");await this.cacheAdapter.invalidateAll(e);}async clone(e){let r=new _e(this.inputDetails);return r.sqlType==="sqlite"||!!e?.shouldRecreatePool?(r.sqlPool=await Oe(r.sqlType,this.inputDetails),r.ownsPool=true):(r.sqlPool=this.sqlPool,r.ownsPool=false),r}getDbType(){return this.sqlType}query(e,r){let o=this.isInGlobalTransaction&&this.globalTransaction?.isActive?this.globalTransaction.sql:this,n=new O(Ma(e,r),o);return r?.alias&&n.from(e,r.alias),n}dryQuery(e,r){return new _r(Ma(e,r),this)}alterTable(...e){let r=new Se(this.getDbType());return r.alterTable(...e),r.queryStatements}createTable(...e){let r=new Se(this.getDbType());return r.createTable(...e),r.queryStatements[0]||""}async startGlobalTransaction(e){let r=await this.clone();return r.sqlConnection=await r.getConnection(),this.globalTransaction=new gt(r,e?.isolationLevel),await this.globalTransaction.startTransaction(),this.globalTransaction}async commitGlobalTransaction(e){if(!this.globalTransaction)throw new T("SqlDataSource::commitGlobalTransaction","GLOBAL_TRANSACTION_NOT_STARTED");await this.globalTransaction.commit({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async rollbackGlobalTransaction(e){if(!this.globalTransaction){g.warn("SqlDataSource::rollbackGlobalTransaction - GLOBAL_TRANSACTION_NOT_STARTED");return}await this.globalTransaction.rollback({throwErrorOnInactiveTransaction:e?.throwErrorOnInactiveTransaction}),this.globalTransaction=null;}async startTransaction(e,r){let o=typeof e=="function"?r:e;if(this.globalTransaction?.isActive){if(typeof e=="function")try{await this.globalTransaction.nestedTransaction(e);return}catch(l){throw l}return await this.globalTransaction.nestedTransaction()}let n=await this.clone();n.sqlConnection=await n.getConnection();let s=new gt(n,o?.isolationLevel);if(await s.startTransaction(),typeof e=="function")try{await e(s),await s.commit({throwErrorOnInactiveTransaction:!1});return}catch(a){throw await s.rollback({throwErrorOnInactiveTransaction:false}),a}return s}async transaction(e,r){return this.startTransaction(e,r)}getModelManager(e){if(!this.isConnected)throw new T("SqlDataSource::getModelManager","CONNECTION_NOT_ESTABLISHED");return this.globalTransaction?.isActive?new ht(e,this.globalTransaction.sql):new ht(e,this)}getPool(){if(!this.sqlPool)throw new T("SqlDataSource::getPool","CONNECTION_NOT_ESTABLISHED");return this.sqlPool}async getConnection(){if(this.sqlConnection)return this.sqlConnection;if(!this.sqlPool)throw new T("SqlDataSource::getConnection","CONNECTION_NOT_ESTABLISHED");switch(this.sqlType){case "mysql":case "mariadb":return await this.sqlPool.getConnection();case "postgres":case "cockroachdb":return await this.sqlPool.connect();case "sqlite":return this.sqlPool;case "mssql":return this.sqlPool.transaction();case "oracledb":return await this.sqlPool.getConnection();default:throw new T("SqlDataSource::getConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}}async closeConnection(){if(!this.isConnected){Z("Connection already closed or not established",this.logs);return}if(!this.ownsPool){this.sqlConnection=null;return}try{this.globalTransaction?.isActive&&await this.rollbackGlobalTransaction({throwErrorOnInactiveTransaction:!1});}catch{g.warn("SqlDataSource::closeConnection - Error while rolling back global transaction");}switch(await this.cacheAdapter?.disconnect?.(),this.slaves.length&&await Promise.all(this.slaves.map(async e=>{try{await e.closeConnection();}catch(r){g.warn(`SqlDataSource::closeConnection - Error while closing slave connection: ${r.message}`);}})),Z("Closing connection",this.logs),this.sqlType){case "mysql":case "mariadb":await this.sqlPool.end();break;case "postgres":case "cockroachdb":await this.sqlPool.end();break;case "sqlite":await new Promise((e,r)=>{this.sqlPool.close(o=>{o&&r(o),e();});});break;case "mssql":await this.sqlPool.close();break;case "oracledb":await this.sqlPool.close();break;default:throw new T("SqlDataSource::closeConnection",`UNSUPPORTED_DATABASE_TYPE_${this.sqlType}`)}this.sqlPool=null,this.sqlConnection=null;}getConnectionDetails(){return {type:this.getDbType(),host:this.host,port:this.port,username:this.username,password:this.password,database:this.database,connectionPolicies:this.inputDetails.connectionPolicies,queryFormatOptions:this.inputDetails.queryFormatOptions}}async disconnect(){return this.closeConnection()}async syncSchema(e){if(e=e||{transactional:false},this.sqlType==="sqlite"){g.warn("Syncing schema with SQLite is not supported, skipping...");return}let o=(await Ye.makeDiff(this)).getSqlStatements();if(!o.length){g.info("No new changes detected between database schema and models metadata");return}if(g.info(`Generated ${o.length} SQL statements to sync schema`),!e?.transactional){for(let n of o)await this.rawQuery(n);g.info(`Synced schema with ${o.length} SQL statements`);return}await this.transaction(async n=>{for(let s of o)await n.sql.rawQuery(s);}),g.info(`Synced schema with ${o.length} SQL statements`);}async rawQuery(e,r=[],o){if(!this.isConnected)throw new T("SqlDataSource::rawQuery","CONNECTION_NOT_ESTABLISHED");let n=$t(this,e);return (o?.replicationMode||"master")==="slave"?this.executeOnSlave(async a=>j(n,r,a,this.getDbType(),"raw")):j(n,r,this,this.getDbType(),"raw")}rawStatement(e){return new _(e)}async getTableSchema(e){let[r,o,n,s]=await Promise.all([this.getTableInfo(e),this.getIndexInfo(e),this.getForeignKeyInfo(e),this.getPrimaryKeyInfo(e)]);return {columns:r,indexes:o,foreignKeys:n,primaryKey:s}}getModelOpenApiSchema(){return La(Object.values(this._models))}async initializeAdminJs(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJs","ADMINJS_NOT_ENABLED");return this.adminJsInstance?this.adminJsInstance.admin:(this.adminJsInstance=await kr(this,this.adminJsOptions),this.adminJsInstance?.admin)}async initializeAdminJsExpress(){if(!this.adminJsOptions?.enabled)throw new T("SqlDataSource::initializeAdminJsExpress","ADMINJS_NOT_ENABLED");return this.adminJsInstance?.router?this.adminJsInstance:(this.adminJsInstance=await Ka(this,this.adminJsOptions),this.adminJsInstance)}getAdminJs(){return this.adminJsInstance}getAdminJsOptions(){return this.adminJsOptions}isAdminJsEnabled(){return !!this.adminJsOptions?.enabled}async getTableInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Ht(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(a){if(at(this.getDbType(),a))return [];throw a}let s=this.getDbType();return s==="sqlite"?n.map(a=>{let l=String(a.type||"").toLowerCase(),d=Ie(s,l);return {name:a.name,dataType:d,isNullable:a.notnull===0,defaultValue:a.dflt_value??null,withTimezone:null}}):n.map(a=>{let l=String(a.column_name||a.COLUMN_NAME||a.name||""),d=String(a.data_type||a.DATA_TYPE||a.type||"").toLowerCase(),m=Ie(s,d),u=a.is_nullable!==void 0?a.is_nullable:a.IS_NULLABLE!==void 0?a.IS_NULLABLE:void 0,c=typeof u=="string"?u.toLowerCase()!=="no":typeof u=="boolean"?u:a.notnull!==void 0?a.notnull===0:true,p=a.column_default??a.COLUMN_DEFAULT??a.defaultValue??a.dflt_value??null,y=a.char_length!=null?Number(a.char_length):null,h=a.numeric_precision!=null?Number(a.numeric_precision):null,N=a.numeric_scale!=null?Number(a.numeric_scale):null,M=a.timezone!=null?!!a.timezone:typeof a.datetime_precision=="number"?/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase()):/with time zone/.test(String(a.column_type||a.udt_name||"").toLowerCase());return {name:l,dataType:m,isNullable:c,defaultValue:p,length:y,precision:h,scale:N,withTimezone:M}})}async getIndexInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new jt(e)]).sql,n=this.getDbType(),s=[];try{s=await this.rawQuery(o);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(n==="mysql"||n==="mariadb"){let l=new Map;for(let d of s){let m=d.Key_name,u=d.Non_unique===0,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.Column_name),l.set(m,c);}return Array.from(l.values())}if(n==="postgres"||n==="cockroachdb"){let l=new Map;for(let d of s){let m=d.index_name,u=!!d.is_unique,c=l.get(m)||{name:m,columns:[],isUnique:u};c.columns.push(d.column_name),l.set(m,c);}return Array.from(l.values())}let a=[];for(let l of s){let d=l.name,m=!!l.unique,c=(await this.rawQuery(`PRAGMA index_info(${d})`)).map(p=>p.name);a.push({name:d,columns:c,isUnique:m});}return a}async getForeignKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Wt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(at(this.getDbType(),l))return [];throw l}if(this.getDbType()==="sqlite"){let l=new Map;for(let d of n){let m=Number(d.id),u=l.get(m)||{name:void 0,columns:[],referencedTable:String(d.table),referencedColumns:[],onDelete:d.on_delete??null,onUpdate:d.on_update??null};u.columns.push(String(d.from)),u.referencedColumns.push(String(d.to)),l.set(m,u);}return Array.from(l.values())}let a=new Map;for(let l of n){let d=String(l.name||""),m=d||`${l.referenced_table}_${l.column_name}`,u=a.get(m)||{name:d||void 0,columns:[],referencedTable:String(l.referenced_table),referencedColumns:[],onDelete:l.on_delete??null,onUpdate:l.on_update??null};u.columns.push(String(l.column_name)),u.referencedColumns.push(String(l.referenced_column)),a.set(m,u);}return Array.from(a.values())}async getPrimaryKeyInfo(e){let o=new b({table:e,databaseCaseConvention:"preserve",modelCaseConvention:"preserve"},this.getDbType()).parse([new Vt(e)]).sql,n=[];try{n=await this.rawQuery(o);}catch(l){if(at(this.getDbType(),l))return;throw l}if(!n.length)return;let s=n.map(l=>String(l.column_name));return {name:n[0].name||void 0,columns:s}}async acquireLock(e="hysteria_lock",r=3e4){let o=this.getDbType();try{switch(o){case "postgres":case "cockroachdb":{let n=this.hashStringToLockId(e),a=(await this.rawQuery("SELECT pg_try_advisory_lock($1) as pg_try_advisory_lock",[n])).rows?.[0]?.pg_try_advisory_lock;return a===!0||a==="t"}case "mysql":case "mariadb":{let n=Math.floor(r/1e3);return (await this.rawQuery("SELECT GET_LOCK(?, ?) as lock_result",[e,n]))[0]?.[0]?.lock_result===1}case "mssql":return ((await this.rawQuery("DECLARE @result INT; EXEC @result = sp_getapplock @Resource = @p0, @LockMode = 'Exclusive', @LockOwner = 'Session', @LockTimeout = @p1; SELECT @result as lock_result",[e,r])).recordset?.[0]?.lock_result??-999)>=0;case "oracledb":try{let n=this.hashStringToLockId(e);return await this.rawQuery(`BEGIN DBMS_LOCK.ALLOCATE_UNIQUE('${e}', '${n}'); END;`),(await this.rawQuery(`DECLARE
289
- v_result NUMBER;
290
- BEGIN
291
- v_result := DBMS_LOCK.REQUEST(
292
- lockhandle => ${n},
293
- lockmode => DBMS_LOCK.X_MODE,
294
- timeout => ${Math.floor(r/1e3)},
295
- release_on_commit => FALSE
296
- );
297
- IF v_result IN (0, 4) THEN
298
- :result := 1;
299
- ELSE
300
- :result := 0;
301
- END IF;
302
- END;`))?.outBinds?.result===1}catch(n){let s=n instanceof Error?n:new Error(String(n));return g.warn(`Oracle lock allocation may have failed: ${s.message}`),!1}case "sqlite":return g.info("SQLite uses automatic file-based locking, advisory locks not needed"),!0;default:return g.warn(`Advisory locks not implemented for database type: ${o}`),!0}}catch(n){let s=n instanceof Error?n:new Error(String(n));return g.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
303
- v_result NUMBER;
304
- BEGIN
305
- v_result := DBMS_LOCK.RELEASE(${o});
306
- IF v_result = 0 THEN
307
- :result := 1;
308
- ELSE
309
- :result := 0;
310
- END IF;
311
- END;`))?.outBinds?.result===1}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.warn(`Oracle lock release may have failed: ${n.message}`),!1}case "sqlite":return !0;default:return g.warn(`Advisory locks not implemented for database type: ${r}`),!0}}catch(o){let n=o instanceof Error?o:new Error(String(o));return g.error(`Failed to release lock: ${n.message||JSON.stringify(o)} (dbType: ${r}, lockKey: ${e}). Full error: ${JSON.stringify(o)}`),false}}hashStringToLockId(e){let r=0;for(let o=0;o<e.length;o++){let n=e.charCodeAt(o);r=(r<<5)-r+n,r=r&r;}return Math.abs(r)}async executeOnSlave(e){let r=this.getSlave();if(!r)return e(this);try{return await e(r)}catch(o){let n=o instanceof Error?o:new Error(String(o));if(this.onSlaveServerFailure)return await this.onSlaveServerFailure(n,{host:r.host,port:r.port,username:r.username,password:r.password,database:r.database,type:r.sqlType}),e(this);throw n}}async connectWithoutSettingPrimary(){this.sqlPool=await Oe(this.sqlType,this.inputDetails),this.ownsPool=true;}};le=new WeakMap,Pa(_e,le,null);var Ae=_e;var Re=class{constructor(t){this.migrationTable="migrations";this.sql=t||Ae.instance;}async upMigrations(t){for(let e of t){g.info(`Running migration ${e.migrationName}`),await e.up();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.addMigrationToMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async downMigrations(t){t=t.reverse();for(let e of t){g.info(`Rolling back migration ${e.migrationName}`),await e.down();let r=e.schema.queryStatements;for(let o of r)o&&await this.sql.rawQuery(o);await this.deleteMigrationFromMigrationTable(e),e.afterMigration&&await e.afterMigration(this.sql);}}async addMigrationToMigrationTable(t){let e=new Date,r=this.sql.getDbType()==="oracledb"?e:e.toISOString().replace("T"," ").replace(/\.\d{3}Z$/,"");await this.sql.query(this.migrationTable).insert({name:t.migrationName,timestamp:r});}async deleteMigrationFromMigrationTable(t){await this.sql.query(this.migrationTable).where("name",t.migrationName).delete();}};async function bt(i,t,e,r,o){let n=i.getDbType(),s=o&&n!=="mssql"&&n!=="oracledb",a=null;g.info("Rolling back migrations for database type: "+n);try{let l=await Rt(n,i.getPool()),d=await At(n,e,r),m=l.map(p=>p.name),u=d.filter(p=>m.includes(p.migrationName));if(u.length===0){g.info("No pending migrations.");return}if(t){let p=u.findIndex(N=>N.migrationName===t);if(p===-1){g.error(`Rollback until migration not found: ${t}`);return}let y=u.slice(p);s&&(a=await i.startTransaction(),i=a.sql),await new Re(i).downMigrations(y),s&&await a?.commit(),g.info("Migrations rolled back successfully");return}let c=new Re(i);s&&(a=await i.startTransaction(),i=a.sql),await c.downMigrations(u),s&&await a?.commit();}catch(l){throw s&&await a?.rollback(),l}g.info("Migrations rolled back successfully");}var Cr=class{static async generate(t){return `import { Migration } from "hysteria-orm";
312
-
313
- export default class extends Migration {
314
- async up() {
315
- ${t.map(r=>` this.schema.rawQuery('${r.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}');`).join(`
316
- `)}
317
- }
318
-
319
- async down() {}
320
- }`}};var Rr=class{static initTemplate(t){let e=this.getDefaultPort(t),r=t==="sqlite"?"database.db":"database",o=t==="mongodb"?"mongo":t==="redis"?"redis":"SqlDataSource";return t==="mongodb"||t==="redis"?this.handleNoSqlConnection(t,o==="SqlDataSource"?"sql":o):`
321
- import { ${o} } from "hysteria-orm";
322
-
323
- const db = new ${o}({
324
- type: "${t}",
325
- database: "${r}",${t==="sqlite"?`
326
- logs: true,
327
- migrations: {
328
- path: "database/migrations",
329
- },`:`
330
- port: ${e},
331
- host: "localhost",
332
- username: "root",
333
- password: "root",
334
- logs: true,
335
- migrations: {
336
- path: "database/migrations",
337
- },`}
338
- });
339
-
340
- await db.connect().catch((err) => {
341
- console.error(err);
342
- process.exit(1);
343
- });
344
-
345
- export default db;
346
- `}static handleNoSqlConnection(t,e){let r=this.getNoSqlConnectionConfig(t);return r?`
347
- import { ${e} } from "hysteria-orm";
348
-
349
- const db = await ${e}.connect(${r}).catch((err) => {
350
- console.error(err);
351
- process.exit(1);
352
- });
353
-
354
- export default db;`:""}static getNoSqlConnectionConfig(t){switch(t){case "mongodb":return "mongodb://localhost:27017/database?authSource=admin";case "redis":return `{
355
- host: "localhost",
356
- port: 6379,
357
- password: "root",
358
- username: "default",
359
- db: 0,
360
- }`;default:return ""}}static getDefaultPort(t){switch(t){case "mysql":return 3306;case "postgres":return 5432;case "mariadb":return 3306;case "cockroachdb":return 26257;case "mssql":return 1433;case "mongodb":return 27017;case "redis":return 6379;case "oracledb":return 1521;default:return 3306}}};async function Ar(i,t,e){let r=t.getDbType();g.info(`Running sql for ${r}`);let o=await t.rawQuery(i);if(g.info("Sql ran successfully"),e){let n=Be__default.default.dirname(e);de__default.default.existsSync(n)||de__default.default.mkdirSync(n,{recursive:true}),de__default.default.writeFileSync(e,JSON.stringify(o,null,2)),g.info(`Query result saved to ${e}`);return}g.info(JSON.stringify(o,null,2)),await t.disconnect();}var xr=class{static seederTemplate(){return `import { BaseSeeder } from "hysteria-orm";
361
-
362
- export default class extends BaseSeeder {
363
- /**
364
- * Run the seeder
365
- */
366
- async run(): Promise<void> {
367
- console.log('Seeder completed');
368
- }
369
- }
370
- `}};var lf=(i,t,e)=>{let r=e||"database/seeders",o=t?".js":".ts",s=`${Date.now()}_${i}${o}`;de__default.default.existsSync(r)||(de__default.default.mkdirSync(r,{recursive:true}),g.info(`Created seeders directory: ${r}`));let a=Be__default.default.join(r,s),l=xr.seederTemplate();de__default.default.writeFileSync(a,l),g.info(`Seeder created successfully: ${a}`);},Wc=lf;var df=async(i,t,e)=>{let r=[];for(let o of t){let n=Be__default.default.resolve(process.cwd(),o);de__default.default.existsSync(n)||(g.error(`Path not found: ${n}`),process.exit(1));let s=de__default.default.statSync(n);if(s.isDirectory()){let a=de__default.default.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=Be__default.default.basename(n),l=Be__default.default.dirname(n);a.endsWith(".ts")||a.endsWith(".js")?r.push({file:a,folder:l}):(g.error(`File must be a .ts or .js file: ${a}`),process.exit(1));}}if(!r.length){g.info("No seeders found");return}g.info(`Found ${r.length} seeder(s) to run`),i.isConnected||await i.connect();for(let{file:o,folder:n}of r)try{g.info(`Running seeder: ${o}`);let s=Be__default.default.resolve(n,o),a=await ne(s,e);if(!a.default){g.error(`Seeder ${o} does not export a default class`);continue}let l=new a.default(i);if(typeof l.run!="function"){g.error(`Seeder ${o} must have a run() method. Make sure it extends BaseSeeder from hysteria-orm`);continue}await l.run(),g.info(`\u2713 Completed seeder: ${o}`);}catch(s){throw g.error(`Failed to run seeder ${o}: ${s}`),s}g.info("All seeders completed successfully");},jc=df;var Hc=()=>de__default.default.existsSync(Be__default.default.join(process.cwd(),"yarn.lock"))?["yarn","add"]:de__default.default.existsSync(Be__default.default.join(process.cwd(),"pnpm-lock.yaml"))?["pnpm","add"]:de__default.default.existsSync(Be__default.default.join(process.cwd(),"package-lock.json"))?["npm","install"]:de__default.default.existsSync(Be__default.default.join(process.cwd(),"bun.lockb"))?["bun","add"]:de__default.default.existsSync(Be__default.default.join(process.cwd(),"deno.lock"))?["deno","add"]:["npm","install"],Vc=async(i,t,e,r)=>{let o=uf__default.default.createInterface({input:process.stdin,output:process.stdout}),n=e.join(", "),s=`Do you want to install the following dependencies using ${t}?
371
- ${n}
372
- (y/n): `;return new Promise(a=>{o.question(s,l=>{if(o.close(),l.toLowerCase()==="y"||l.toLowerCase()==="yes"){child_process.execSync(i,r),a(true);return}a(false);});})},Jc=async(i,t,e)=>{let r=Dr.includes(e)?["bundle-require@^5.1.0","typescript@^5.9.3","esbuild@^0.27.0"]:[],o="";switch(e){case "mariadb":case "mysql":o="mysql2@^3.15.3",r.push("@types/mysql2@github:types/mysql2");break;case "cockroachdb":case "postgres":o="pg@^8.16.3",r.push("@types/pg@^8.16.0");break;case "sqlite":o="sqlite3@^5.1.7",r.push("@types/sqlite3@^5.1.0");break;case "mongo":o="mongodb@^7.0.0",r.push("@types/mongodb@^4.0.7");break;case "redis":o="ioredis@^5.8.2",r.push("@types/ioredis@^5.0.0");break;case "mssql":o="mssql@^12.2.0",r.push("@types/mssql@^9.1.8");break;case "oracledb":o="oracledb@^6.10.0",r.push("@types/oracledb@^6.10.0");break;default:throw new Error(`Invalid database type: ${e}`)}if(o){let s=await Vc(`${i} ${t} ${o}`,i,[o],{stdio:"inherit"});s&&g.info("Driver dependency installed successfully"),s||g.info("Driver dependency installation skipped");}let n=i==="deno"?"--dev":"-D";if(r.length){let s=await Vc(`${i} ${t} ${r.join(" ")} ${n}`,i,r,{stdio:"inherit"});s&&g.info("Dev dependencies installed successfully"),s||g.info("Dev dependencies installation skipped");}};var Dr=["sqlite","mysql","postgres","mariadb","cockroachdb","mssql"],Ir=Dr.concat("mongodb","redis"),be=new commander.Command;be.command("init",{isDefault:false}).option("-t, --type [type]",`Type of the database to connect to, available types: ${Ir.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=Ir.join(", ");i.type||(g.error(`Database type is required (-t|--type), available types: ${t}`),process.exit(1)),Ir.includes(i.type)||(g.error(`Invalid database type: ${i.type}, available types: ${Ir.join(", ")}`),process.exit(1)),g.info("Initializing hysteria-orm with standard configuration"),g.info(`Database type: ${i.type||"not specified (will use env DB_TYPE)"}`);let[e,r]=Hc();g.info(`Package manager: ${e}`),g.info("Installing base dependencies"),await Jc(e,r,i.type);let o=Rr.initTemplate(i.type);de__default.default.existsSync("database")?g.info("database folder already exists, skipping"):de__default.default.mkdirSync("database",{recursive:true}),de__default.default.existsSync("database/index.ts")?g.info("database/index.ts file already exists, skipping"):de__default.default.writeFileSync("database/index.ts",o),Dr.includes(i.type)&&!de__default.default.existsSync("database/migrations")?de__default.default.mkdirSync("database/migrations",{recursive:true}):g.info("database/migrations folder already exists or is not a sql database, skipping"),g.info("Initialization completed successfully");});be.command("sql [sql]").alias("run:sql").option("-f, --file [path]","Path to the sql file",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-o, --out [query]","File path to save the query result",void 0).option("-t, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).description("Run a sql file or a sql query directly from the command line for the given connection defined in the env file").action(async(i,t)=>{g.info("Starting SQL execution"),t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let e=t?.file;!i&&!e&&(g.error("SQL query or file path is required"),process.exit(1)),i&&e&&(g.error("Cannot provide both sql query and file path"),process.exit(1));let r=Be__default.default.resolve(process.cwd(),t.datasource),{default:o}=await ne(r,t?.tsconfigPath);if(i){g.info("Executing SQL query directly from command line");try{await Ar(i,o,t?.out),g.info("SQL execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL execution failed: ${s}`),process.exit(1);}}e||(g.error("No SQL statement or file provided"),process.exit(1)),g.info(`Reading SQL from file: ${e}`),e=Be__default.default.resolve(process.cwd(),e),de__default.default.existsSync(e)||(g.error(`File not found: ${e}`),process.exit(1));let n=de__default.default.readFileSync(e,"utf-8");g.info(`SQL file loaded successfully (${n.length} characters)`);try{await Ar(n,o,t?.out),g.info("SQL file execution completed successfully"),process.exit(0);}catch(s){g.error(`SQL file execution failed: ${s}`),process.exit(1);}});be.command("create:migration <name>").description("Create a new migration file, standard folder is migrations from the current directory you are now, you can change it in the env MIGRATION_PATH").option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-a, --alter","Generate a template for an alter table migration",false).option("-c, --create","Generate a template for a create table migration",false).option("-t, --table <table>","Specifies the target table name for the migration",false).action((i,t)=>{g.info(`Creating migration: ${i}`),g.info(`Migration options: javascript=${t.javascript}, alter=${t.alter}, create=${t.create}, table=${t.table||"not specified"}`),i||(g.error("Migration name is required"),process.exit(1)),t.alter&&t.create&&(g.error("Cannot use --alter and --create at the same time"),process.exit(1)),t.table&&!(t.create||t.alter)&&(g.error("Cannot use --table without --create or --alter"),process.exit(1));let e=t.alter?"alter":t.create?"create":"basic";g.info(`Migration mode: ${e}`),Oa(i,t.javascript,e,t.table||i);});be.command("migrate [runUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, only applies to postgres",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Run pending migrations, if runUntil is provided, it will run all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ne(Be__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await st(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});be.command("rollback [rollbackUntil]").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-m, --migration-path [migrationPath]","Path to the migrations",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).description("Rollbacks every migration that has been run, if rollbackUntil is provided, it will rollback all migrations until the provided migration name").action(async(i,t)=>{t?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ne(Be__default.default.resolve(process.cwd(),t.datasource),t?.tsconfigPath),r=t?.migrationPath||e.migrationConfig.path,o=t?.tsconfigPath||e.migrationConfig.tsconfig,n=t?.lock??e.migrationConfig.lock,s=t?.lockTimeout?parseInt(t.lockTimeout,10):e.migrationConfig.lockTimeout,a=t?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}await bt(e,i,r,o,a);}catch(d){throw console.error(d),d}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});be.command("refresh").option("-f, --force","Drop all tables in the database before running the migrations instead of running the down migrations",false).option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-t, --transactional","Runs all the pending migrations in a single transaction, this does not apply to mysql since it does not support transactions inside schema changes",true).option("-l, --lock","Acquire advisory lock before running migrations to prevent concurrent execution",true).option("--lock-timeout [lockTimeout]","Lock timeout in milliseconds for migration advisory lock acquisition",void 0).option("-m, --migration-path [path]","Path to the migrations",void 0).description("Rollbacks every migration that has been run and then run the migrations").action(async i=>{let t=i?.force||false;i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:e}=await ne(Be__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath),r=i?.migrationPath||e.migrationConfig.path,o=i?.tsconfigPath||e.migrationConfig.tsconfig,n=i?.lock??e.migrationConfig.lock,s=i?.lockTimeout?parseInt(i.lockTimeout,10):e.migrationConfig.lockTimeout,a=i?.transactional??e.migrationConfig.transactional,l=false;try{if(n){if(g.info("Acquiring migration lock for refresh operation"),l=await e.acquireLock("hysteria_migration_lock",s),!l)throw g.error("Failed to acquire migration lock. Another migration may be running."),new Error("Failed to acquire migration lock");g.info("Migration lock acquired successfully");}t?await Er(e,!1,a):await bt(e,void 0,r,o,a),await st(e,void 0,r,o,a);}catch(d){console.error(d);}finally{n&&l&&(g.info("Releasing migration lock"),await e.releaseLock("hysteria_migration_lock")||g.warn("Failed to release migration lock")),await e.closeConnection();}});be.command("generate:migrations").description("Generate a migration file based on the database schema and the models metadata, not supported for sqlite").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-f, --dry","Does not create a migration file but only outputs sql statements",false).option("-j, --javascript","Generate a javascript migration file instead of a default typescript one",false).option("-m, --migration-path [path]","Path to the migrations",void 0).option("-n, --name [name]","Name of the migration",void 0).action(async i=>{i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1)),i?.name||(i.name="auto_generated_migration"),i.name=`${Date.now()}_${i.name}`;let{default:t}=await ne(Be__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e=i?.migrationPath||t.migrationConfig.path;["mysql","postgres","mariadb","cockroachdb"].includes(t.getDbType())||(g.error(`generate:migrations is not supported for ${t.getDbType()}, it's suggested to use manual migrations instead`),process.exit(1));try{let n=(await Ye.makeDiff(t)).getSqlStatements();if(n.length||(g.info("No new changes detected between database schema and models metadata"),process.exit(0)),i.dry){for(let l of n)console.log(l);process.exit(0);}de__default.default.existsSync(e)||de__default.default.mkdirSync(e,{recursive:!0});let s=await Cr.generate(n),a=i?.javascript?".js":".ts";de__default.default.writeFileSync(`${e}/${i?.name}${a}`,s),g.info(`Migration file created successfully: ${i?.name}${a}`),await t.closeConnection(),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});be.command("create:seeder <name>").description("Create a new seeder file").option("-j, --javascript","Generate a javascript seeder file instead of a default typescript one",false).option("-s, --seeder-path [path]","Path to the seeders",void 0).action((i,t)=>{g.info(`Creating seeder: ${i}`),g.info(`Seeder options: javascript=${t.javascript}`),i||(g.error("Seeder name is required"),process.exit(1)),Wc(i,t.javascript,t.seederPath);});be.command("seed").description("Run database seeders from folder or specific files").option("-c, --tsconfig [tsconfigPath]","Path to the tsconfig.json file, defaults to ./tsconfig.json",void 0).option("-d, --datasource [path]","Path to SqlDataSource (default export)",void 0).option("-s, --seeder-path [path]","Path to seeder folder or file (can be specified multiple times or comma-separated)",(i,t=[])=>[...t,i]).action(async i=>{g.info("Starting seeder execution"),i?.datasource||(g.error("SqlDataSource file path is required (-d|--datasource)"),process.exit(1));let{default:t}=await ne(Be__default.default.resolve(process.cwd(),i.datasource),i?.tsconfigPath),e;i?.seederPath&&i.seederPath.length>0?e=i.seederPath.flatMap(o=>o.split(",").map(n=>n.trim())):e=[t.seederConfig.path];let r=i?.tsconfigPath||t.seederConfig.tsconfig;try{await jc(t,e,r),await t.closeConnection(),g.info("Seeding completed successfully"),process.exit(0);}catch(o){console.error(o),await t.closeConnection(),process.exit(1);}});be.parse(process.argv);exports.sqlDatabaseTypes=Dr;//# sourceMappingURL=cli.cjs.map
373
- //# sourceMappingURL=cli.cjs.map