@stacksjs/query-builder 0.70.205 → 0.70.206
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/dist/index.js +1 -468
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,469 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var u0=import.meta.require;import{existsSync as S5,statSync as A5}from"fs";import{existsSync as R2,mkdirSync as UE,readdirSync as _E,readFileSync as K2,writeFileSync as QE}from"fs";import{homedir as jX}from"os";import{dirname as jE,resolve as L9}from"path";import k$ from"process";import{existsSync as k5,statSync as x5}from"fs";import{existsSync as I1,mkdirSync as D2,readdirSync as M2,writeFileSync as H2}from"fs";import{homedir as EX}from"os";import{dirname as B5,resolve as o0}from"path";import e9 from"process";import{join as C2,relative as w2,resolve as y5}from"path";import x$ from"process";import{existsSync as b6,mkdirSync as KE,readdirSync as DE,writeFileSync as ME}from"fs";import{homedir as WZ}from"os";import{dirname as wE,resolve as l0}from"path";import S8 from"process";import{join as q2,relative as P2,resolve as h5}from"path";import B$ from"process";import{existsSync as f6,mkdirSync as SE,readdirSync as AE,writeFileSync as kE}from"fs";import{dirname as BE,resolve as y$}from"path";import R1 from"process";import{Buffer as f9}from"buffer";import{createCipheriv as T2,createDecipheriv as N2,randomBytes as VZ}from"crypto";import{closeSync as IZ,createReadStream as v5,createWriteStream as S2,existsSync as RZ,fsyncSync as b5,openSync as f5,writeFileSync as A2}from"fs";import{access as k2,constants as g5,mkdir as x2,readdir as p8,rename as d5,stat as GX,unlink as c8,writeFile as KZ}from"fs/promises";import{join as FX}from"path";import p0 from"process";import{pipeline as B2}from"stream/promises";import{createGzip as p5}from"zlib";import OX from"process";import N9 from"process";import{Buffer as M9}from"buffer";import{createCipheriv as y2,createDecipheriv as h2,randomBytes as DZ}from"crypto";import{closeSync as MZ,createReadStream as c5,createWriteStream as v2,existsSync as m8,fsyncSync as m5,openSync as u5,writeFileSync as b2}from"fs";import{access as f2,constants as n5,mkdir as g2,readdir as u8,rename as i5,stat as JX,unlink as n8,writeFile as HZ}from"fs/promises";import{isAbsolute as d2,join as WX,resolve as p2}from"path";import j0 from"process";import{pipeline as c2}from"stream/promises";import{createGzip as l5}from"zlib";import VX from"process";import S9 from"process";import i8 from"process";import{existsSync as l8}from"fs";import{resolve as CZ}from"path";import{existsSync as m2}from"fs";import{existsSync as u2,readdirSync as n2}from"fs";import{extname as wZ,resolve as s5}from"path";import i2 from"process";import{join as l2,relative as s2,resolve as o5}from"path";import h$ from"process";import{Buffer as H9}from"buffer";import{createCipheriv as o2,createDecipheriv as r2,randomBytes as qZ}from"crypto";import{closeSync as PZ,createReadStream as r5,createWriteStream as a2,existsSync as s8,fsyncSync as a5,openSync as t5,writeFileSync as t2}from"fs";import{access as e2,constants as e5,mkdir as X4,readdir as o8,rename as XY,stat as IX,unlink as r8,writeFile as TZ}from"fs/promises";import{isAbsolute as $4,join as RX,resolve as Z4}from"path";import E0 from"process";import{pipeline as Y4}from"stream/promises";import{createGzip as $Y}from"zlib";import KX from"process";import A9 from"process";import a8 from"process";import{existsSync as t8}from"fs";import{resolve as NZ}from"path";import{existsSync as U4}from"fs";import{Database as h_}from"bun:sqlite";import{mkdirSync as v_}from"fs";import{dirname as b_}from"path";import $$ from"process";import U$ from"process";import{createInterface as _Q}from"readline";import{existsSync as LQ,readFileSync as jQ,writeFileSync as eX}from"fs";import vY from"process";import bY from"process";import{existsSync as x1,mkdirSync as kQ,writeFileSync as xQ}from"fs";import{dirname as fY,join as B1}from"path";import KU from"process";import{existsSync as b9,mkdirSync as qU,mkdtempSync as hQ,readdirSync as PU,readFileSync as E5,rmSync as vQ,unlinkSync as q$,writeFileSync as TU}from"fs";import{tmpdir as bQ}from"os";import{join as i0}from"path";import v8 from"process";import{existsSync as y1,readFileSync as lQ,unlinkSync as sQ}from"fs";import{dirname as dY,join as O5}from"path";import yU from"process";import{existsSync as hU,readdirSync as Xz}from"fs";import{dirname as pY,join as vU}from"path";import bU from"process";import{readdirSync as _z}from"fs";import{extname as uZ,join as cY}from"path";import Qz from"process";import{readdirSync as jz,readFileSync as mY,statSync as Ez}from"fs";import{extname as uY,join as Gz}from"path";import{writeFileSync as Oz}from"fs";import{join as Jz}from"path";import Wz from"process";import{existsSync as u$,mkdirSync as Kz,readdirSync as Dz,writeFileSync as Mz}from"fs";import{dirname as nY,join as u9}from"path";import b8 from"process";import{existsSync as Pz}from"fs";import{dirname as iY,join as gU}from"path";import dU from"process";import{existsSync as xz}from"fs";import{join as Bz}from"path";import yz from"process";import{existsSync as lY,statSync as sY}from"fs";import{join as hz,relative as vz,resolve as oY}from"path";import n$ from"process";import{Buffer as C9}from"buffer";import{createCipheriv as bz,createDecipheriv as fz,randomBytes as nZ}from"crypto";import{closeSync as iZ,createReadStream as rY,createWriteStream as gz,existsSync as _$,fsyncSync as aY,openSync as tY,writeFileSync as dz}from"fs";import{access as pz,constants as eY,mkdir as cz,readdir as Q$,rename as X6,stat as MX,unlink as z$,writeFile as lZ}from"fs/promises";import{isAbsolute as mz,join as HX,resolve as uz}from"path";import W0 from"process";import{pipeline as nz}from"stream/promises";import{createGzip as $6}from"zlib";import CX from"process";import k9 from"process";import L$ from"process";import{existsSync as j$}from"fs";import{resolve as sZ}from"path";import{existsSync as iz}from"fs";import{existsSync as v1,mkdirSync as lz,readdirSync as sz,readFileSync as oz,writeFileSync as rz}from"fs";import{homedir as wX}from"os";import{dirname as Z6,resolve as r0}from"path";import $X from"process";import{existsSync as az,readdirSync as tz}from"fs";import{extname as oZ,resolve as Y6}from"path";import ez from"process";import{spawnSync as XL}from"child_process";import{existsSync as SX,readFileSync as $L}from"fs";import{join as AX}from"path";import cU from"process";import{Database as u1}from"bun:sqlite";import{readdirSync as Oj,statSync as Jj}from"fs";import{basename as Wj,extname as Vj}from"path";import Ij from"process";import{existsSync as k7,mkdirSync as Dj,writeFileSync as Mj}from"fs";import{dirname as D6,join as M5}from"path";import x7 from"process";var{defineProperty:V1,getOwnPropertyNames:o7,getOwnPropertyDescriptor:r7}=Object,a7=Object.prototype.hasOwnProperty;function t7(X){return this[X]}var e7=(X)=>{var $=(P5??=new WeakMap).get(X),Z;if($)return $;if($=V1({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var Y of o7(X))if(!a7.call($,Y))V1($,Y,{get:t7.bind(X,Y),enumerable:!(Z=r7(X,Y))||Z.enumerable})}return P5.set(X,$),$},P5,X2=(X)=>X;function $2(X,$){this[X]=X2.bind(null,$)}var a1=(X,$)=>{for(var Z in $)V1(X,Z,{get:$[Z],enumerable:!0,configurable:!0,set:$2.bind($,Z)})},e=(X,$)=>()=>(X&&($=X(X=0)),$),Z2=import.meta.require;function sj(X){Q0={...Q0,...X}}function oj(){return Q0}function rj(){return typeof window<"u"&&typeof document<"u"}async function O$(){if(Q0.getToken){let X=Q0.getToken();return X instanceof Promise?X:X}if(typeof localStorage<"u")return localStorage.getItem("auth_token");return null}async function n0(){let X={"Content-Type":"application/json",Accept:"application/json",...Q0.headers},$=await O$();if($)X.Authorization=`Bearer ${$}`;return X}async function E9(X){if(X.status===401)throw Q0.onUnauthorized?.(),new h9("Unauthorized",401);if(!X.ok){let Z=await X.json().catch(()=>({message:"Request failed"}));throw new h9(Z.message||`HTTP ${X.status}`,X.status)}let $=await X.json();if(Q0.transformResponse)return Q0.transformResponse($);return $}class P6{state;constructor(X){this.state={table:X,wheres:[],orderBy:[],selectColumns:["*"],withRelations:[]}}select(...X){return this.state.selectColumns=X,this}where(X,$,Z){if(Z===void 0)this.state.wheres.push({column:X,operator:"=",value:$,boolean:"and"});else this.state.wheres.push({column:X,operator:$,value:Z,boolean:"and"});return this}orWhere(X,$,Z){if(Z===void 0)this.state.wheres.push({column:X,operator:"=",value:$,boolean:"or"});else this.state.wheres.push({column:X,operator:$,value:Z,boolean:"or"});return this}andWhere(X,$,Z){return this.where(X,$,Z)}whereNull(X){return this.where(X,"is",null)}whereNotNull(X){return this.where(X,"is not",null)}whereIn(X,$){return this.where(X,"in",$)}whereNotIn(X,$){return this.where(X,"not in",$)}orderBy(X,$="asc"){return this.state.orderBy.push({column:X,direction:$}),this}orderByDesc(X){return this.orderBy(X,"desc")}latest(X="created_at"){return this.orderBy(X,"desc")}oldest(X="created_at"){return this.orderBy(X,"asc")}limit(X){return this.state.limitValue=X,this}offset(X){return this.state.offsetValue=X,this}skip(X){return this.offset(X)}take(X){return this.limit(X)}with(...X){return this.state.withRelations.push(...X),this}buildQueryParams(){let X=new URLSearchParams;for(let $ of this.state.wheres)if($.operator==="=")X.append($.column,String($.value));else if($.operator==="in"&&Array.isArray($.value))X.append(`${$.column}[]`,$.value.join(","));else if($.operator==="is"&&$.value===null)X.append(`filter[${$.column}][is]`,"null");else if($.operator==="is not"&&$.value===null)X.append(`filter[${$.column}][is_not]`,"null");else X.append(`filter[${$.column}][${$.operator}]`,String($.value));if(this.state.orderBy.length>0){let $=this.state.orderBy.map((Z)=>`${Z.direction==="desc"?"-":""}${Z.column}`).join(",");X.append("sort",$)}if(this.state.limitValue!==void 0)X.append("limit",String(this.state.limitValue));if(this.state.offsetValue!==void 0)X.append("offset",String(this.state.offsetValue));if(this.state.selectColumns.length>0&&!this.state.selectColumns.includes("*"))X.append("fields",this.state.selectColumns.join(","));if(this.state.withRelations.length>0)X.append("include",this.state.withRelations.join(","));return X}buildUrl(X){let $=`${Q0.baseUrl}/${this.state.table}`;if(X!==void 0)return`${$}/${X}`;let Y=this.buildQueryParams().toString();return Y?`${$}?${Y}`:$}async get(){let X=this.buildUrl(),$=await fetch(X,{method:"GET",headers:await n0()}),Z=await E9($);return Array.isArray(Z)?Z:Z.data}async first(){return this.limit(1),(await this.get())[0]??null}async firstOrFail(){let X=await this.first();if(!X)throw new h9(`No ${this.state.table} found`,404);return X}async find(X){let $=this.buildUrl(X);try{let Z=await fetch($,{method:"GET",headers:await n0()});if(Z.status===404)return null;let Y=await E9(Z);return"data"in Y&&!Array.isArray(Y.data)?Y.data:Y}catch{return null}}async findOrFail(X){let $=await this.find(X);if(!$)throw new h9(`${this.state.table} with id ${X} not found`,404);return $}async count(){let X=this.buildQueryParams();X.append("count","true");let $=`${Q0.baseUrl}/${this.state.table}?${X.toString()}`,Z=await fetch($,{method:"GET",headers:await n0()});return(await E9(Z)).count}async exists(){return await this.count()>0}async create(X){let $=`${Q0.baseUrl}/${this.state.table}`,Z=Q0.transformRequest?Q0.transformRequest(X):X,Y=await fetch($,{method:"POST",headers:await n0(),body:JSON.stringify(Z)}),U=await E9(Y);return"data"in U&&!Array.isArray(U.data)?U.data:U}async insert(X){return this.create(X)}async update(X,$){let Z=`${Q0.baseUrl}/${this.state.table}/${X}`,Y=Q0.transformRequest?Q0.transformRequest($):$,U=await fetch(Z,{method:"PATCH",headers:await n0(),body:JSON.stringify(Y)}),_=await E9(U);return"data"in _&&!Array.isArray(_.data)?_.data:_}async delete(X){let $=`${Q0.baseUrl}/${this.state.table}/${X}`;return(await fetch($,{method:"DELETE",headers:await n0()})).ok}async destroy(X){return this.delete(X)}async paginate(X=1,$=15){this.limit($).offset((X-1)*$);let Z=this.buildQueryParams();Z.append("paginate","true");let Y=`${Q0.baseUrl}/${this.state.table}?${Z.toString()}`,U=await fetch(Y,{method:"GET",headers:await n0()});return E9(U)}toState(){return{...this.state}}}function T6(X){return new P6(X)}function aj(){return new Proxy({},{get:(X,$)=>{return()=>T6($)}})}class BX{_attributes;_definition;constructor(X,$={}){this._definition=X,this._attributes={...$}}get(X){return this._attributes[X]}set(X,$){this._attributes[X]=$}get attributes(){return{...this._attributes}}get id(){let X=this._definition.primaryKey||"id";return this._attributes[X]}toJSON(){let X=new Set;for(let[Z,Y]of Object.entries(this._definition.attributes))if(Y.hidden)X.add(Z);let $={};for(let[Z,Y]of Object.entries(this._attributes))if(!X.has(Z))$[Z]=Y;return $}}class D0{_definition;_wheres=[];_orderBy=[];_limit;_offset;_select=["*"];_withRelations=[];constructor(X){this._definition=X}getTablePath(){return typeof this._definition.traits?.useApi==="object"&&this._definition.traits.useApi?.uri||this._definition.table}where(X,$,Z){if(Z===void 0)this._wheres.push({column:X,operator:"=",value:$,boolean:"and"});else this._wheres.push({column:X,operator:$,value:Z,boolean:"and"});return this}orWhere(X,$,Z){if(Z===void 0)this._wheres.push({column:X,operator:"=",value:$,boolean:"or"});else this._wheres.push({column:X,operator:$,value:Z,boolean:"or"});return this}whereIn(X,$){return this._wheres.push({column:X,operator:"in",value:$,boolean:"and"}),this}whereNotIn(X,$){return this._wheres.push({column:X,operator:"not in",value:$,boolean:"and"}),this}whereNull(X){return this._wheres.push({column:X,operator:"is",value:null,boolean:"and"}),this}whereNotNull(X){return this._wheres.push({column:X,operator:"is not",value:null,boolean:"and"}),this}whereLike(X,$){return this._wheres.push({column:X,operator:"like",value:$,boolean:"and"}),this}orderBy(X,$="asc"){return this._orderBy.push({column:X,direction:$}),this}orderByDesc(X){return this.orderBy(X,"desc")}orderByAsc(X){return this.orderBy(X,"asc")}limit(X){return this._limit=X,this}take(X){return this.limit(X)}offset(X){return this._offset=X,this}skip(X){return this.offset(X)}select(...X){return this._select=X,this}with(...X){return this._withRelations.push(...X),this}latest(X="created_at"){return this.orderByDesc(X)}oldest(X="created_at"){return this.orderByAsc(X)}buildQueryParams(){let X=new URLSearchParams;for(let $ of this._wheres)if($.operator==="=")X.append($.column,String($.value));else if(($.operator==="in"||$.operator==="not in")&&Array.isArray($.value))X.append(`${$.column}[]`,$.value.join(","));else if($.operator==="is"&&$.value===null)X.append(`filter[${$.column}][is]`,"null");else if($.operator==="is not"&&$.value===null)X.append(`filter[${$.column}][is_not]`,"null");else X.append(`filter[${$.column}][${$.operator}]`,String($.value));if(this._orderBy.length>0){let $=this._orderBy.map((Z)=>`${Z.direction==="desc"?"-":""}${Z.column}`).join(",");X.append("sort",$)}if(this._limit!==void 0)X.append("limit",String(this._limit));if(this._offset!==void 0)X.append("offset",String(this._offset));if(this._select.length>0&&!this._select.includes("*"))X.append("fields",this._select.join(","));if(this._withRelations.length>0)X.append("include",this._withRelations.join(","));return X}buildUrl(X){let $=`${Q0.baseUrl}/${this.getTablePath()}`;if(X!==void 0)return`${$}/${X}`;let Y=this.buildQueryParams().toString();return Y?`${$}?${Y}`:$}async get(){let X=this.buildUrl(),$=await fetch(X,{method:"GET",headers:await n0()}),Z=await E9($);return(Array.isArray(Z)?Z:Z.data).map((U)=>new BX(this._definition,U))}async first(){return this._limit=1,(await this.get())[0]??null}async firstOrFail(){let X=await this.first();if(!X)throw new h9(`No ${this._definition.name} found`,404);return X}async find(X){let $=this.buildUrl(X);try{let Z=await fetch($,{method:"GET",headers:await n0()});if(Z.status===404)return null;let Y=await E9(Z),U="data"in Y&&!Array.isArray(Y.data)?Y.data:Y;return new BX(this._definition,U)}catch{return null}}async findOrFail(X){let $=await this.find(X);if(!$)throw new h9(`${this._definition.name} with id ${X} not found`,404);return $}async count(){let X=this.buildQueryParams();X.append("count","true");let $=`${Q0.baseUrl}/${this.getTablePath()}?${X.toString()}`,Z=await fetch($,{method:"GET",headers:await n0()});return(await E9(Z)).count}async exists(){return await this.count()>0}async pluck(X){return this._select=[X],(await this.get()).map((Z)=>Z.get(X))}async paginate(X=1,$=15){this._limit=$,this._offset=(X-1)*$;let Z=this.buildQueryParams();Z.append("paginate","true");let Y=`${Q0.baseUrl}/${this.getTablePath()}?${Z.toString()}`,U=await fetch(Y,{method:"GET",headers:await n0()}),_=await E9(U);return{..._,data:_.data.map((Q)=>new BX(this._definition,Q))}}}function Y2(X){return new Proxy({query:()=>new D0(X),where(Z,Y,U){return new D0(X).where(Z,Y,U)},orWhere(Z,Y,U){return new D0(X).orWhere(Z,Y,U)},whereIn(Z,Y){return new D0(X).whereIn(Z,Y)},whereNotIn(Z,Y){return new D0(X).whereNotIn(Z,Y)},whereNull(Z){return new D0(X).whereNull(Z)},whereNotNull(Z){return new D0(X).whereNotNull(Z)},whereLike(Z,Y){return new D0(X).whereLike(Z,Y)},orderBy(Z,Y="asc"){return new D0(X).orderBy(Z,Y)},orderByDesc(Z){return new D0(X).orderByDesc(Z)},select(...Z){return new D0(X).select(...Z)},limit:(Z)=>new D0(X).limit(Z),take:(Z)=>new D0(X).take(Z),skip:(Z)=>new D0(X).skip(Z),latest:(Z="created_at")=>new D0(X).latest(Z),oldest:(Z="created_at")=>new D0(X).oldest(Z),async find(Z){return new D0(X).find(Z)},async findOrFail(Z){return new D0(X).findOrFail(Z)},async all(){return new D0(X).get()},async first(){return new D0(X).first()},async firstOrFail(){return new D0(X).firstOrFail()},async count(){return new D0(X).count()},async exists(){return new D0(X).exists()},async paginate(Z,Y){return new D0(X).paginate(Z,Y)},async pluck(Z){return new D0(X).pluck(Z)},async create(Z){let Y=typeof X.traits?.useApi==="object"&&X.traits.useApi?.uri||X.table,U=`${Q0.baseUrl}/${Y}`,_=Q0.transformRequest?Q0.transformRequest(Z):Z,Q=await fetch(U,{method:"POST",headers:await n0(),body:JSON.stringify(_)}),L=await E9(Q),z="data"in L&&!Array.isArray(L.data)?L.data:L;return new BX(X,z)},async update(Z,Y){let U=typeof X.traits?.useApi==="object"&&X.traits.useApi?.uri||X.table,_=`${Q0.baseUrl}/${U}/${Z}`,Q=Q0.transformRequest?Q0.transformRequest(Y):Y,L=await fetch(_,{method:"PATCH",headers:await n0(),body:JSON.stringify(Q)}),z=await E9(L),j="data"in z&&!Array.isArray(z.data)?z.data:z;return new BX(X,j)},async delete(Z){let Y=typeof X.traits?.useApi==="object"&&X.traits.useApi?.uri||X.table,U=`${Q0.baseUrl}/${Y}/${Z}`;return(await fetch(U,{method:"DELETE",headers:await n0()})).ok},async destroy(Z){return this.delete(Z)},getDefinition:()=>X,getTable:()=>X.table},{get(Z,Y){if(typeof Y==="string"&&Y.startsWith("where")&&Y.length>5){let U=Y.slice(5),_=U.charAt(0).toLowerCase()+U.slice(1);if(_ in X.attributes||_==="id"||_===X.primaryKey)return(Q)=>new D0(X).where(_,Q)}return Reflect.get(Z,Y)}})}var Q0,h9,U2,_2,N6=e(()=>{Q0={baseUrl:""},h9=class extends Error{status;constructor($,Z){super($);this.name="BrowserQueryError",this.status=Z}},U2={async login(X){let $=await fetch(`${Q0.baseUrl}/login`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",...Q0.headers},body:JSON.stringify(X)});if(!$.ok){let U=await $.json().catch(()=>({message:"Login failed"}));throw new h9(U.message||"Login failed",$.status)}let Z=await $.json(),Y=Z.data||Z;if(typeof localStorage<"u"&&Y.token)localStorage.setItem("auth_token",Y.token);return Y},async register(X){let $=await fetch(`${Q0.baseUrl}/register`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",...Q0.headers},body:JSON.stringify(X)});if(!$.ok){let U=await $.json().catch(()=>({message:"Registration failed"}));throw new h9(U.message||"Registration failed",$.status)}let Z=await $.json(),Y=Z.data||Z;if(typeof localStorage<"u"&&Y.token)localStorage.setItem("auth_token",Y.token);return Y},async logout(){if(await O$())try{await fetch(`${Q0.baseUrl}/logout`,{method:"POST",headers:await n0()})}catch{}if(typeof localStorage<"u")localStorage.removeItem("auth_token")},async user(){if(!await O$())return null;try{let $=await fetch(`${Q0.baseUrl}/user`,{method:"GET",headers:await n0()});if($.status===401)return Q0.onUnauthorized?.(),null;if(!$.ok)return null;let Z=await $.json();return Z.user||Z}catch{return null}},async check(){return await this.user()!==null},getToken:O$},_2=T6});class S6{config;entityMappings=new Map;constructor(X){if(this.config=X,X.entityMappings)for(let $ of X.entityMappings)this.registerEntity($)}createTable(X){return{...X,billingMode:X.billingMode??this.config.defaultBillingMode??"PAY_PER_REQUEST"}}deleteTable(X){return{tableName:X}}registerEntity(X){this.entityMappings.set(X.entityType,X)}getEntityMapping(X){return this.entityMappings.get(X)}buildPrimaryKey(X,$){let Z=this.entityMappings.get(X);if(!Z)throw Error(`No entity mapping found for type: ${X}`);let Y=this.interpolatePattern(Z.pkPattern,$),U=this.interpolatePattern(Z.skPattern,$);return{pk:Y,sk:U}}parseEntityFromItem(X){let $=X.pk||X.PK;if(!$)return null;for(let[Z,Y]of this.entityMappings){let U=Y.pkPattern.split("${")[0];if($.startsWith(U))return{entityType:Z,data:this.unmarshall(X)}}return null}buildQueryParams(X){return{tableName:X.tableName??this.config.tableName??"",keyConditions:X.keyConditions??[],...X}}buildScanParams(X){return{tableName:X.tableName??this.config.tableName??"",...X}}buildGetItemParams(X){return{tableName:X.tableName??this.config.tableName??"",key:X.key??{},...X}}buildPutItemParams(X){return{tableName:X.tableName??this.config.tableName??"",item:X.item??{},...X}}buildUpdateItemParams(X){return{tableName:X.tableName??this.config.tableName??"",key:X.key??{},updateExpressions:X.updateExpressions??{},...X}}buildDeleteItemParams(X){return{tableName:X.tableName??this.config.tableName??"",key:X.key??{},...X}}buildBatchGetItemParams(X){return{requestItems:X.requestItems??{}}}buildBatchWriteItemParams(X){return{requestItems:X.requestItems??{}}}buildTransactWriteParams(X){return{transactItems:X.transactItems??[],...X}}buildKeyConditionExpression(X){return this.buildExpression(X,"AND")}buildFilterExpression(X){return this.buildExpression(X,"AND")}buildUpdateExpression(X){let $={},Z={},Y=[],U=0;if(X.set&&Object.keys(X.set).length>0){let _=[];for(let[Q,L]of Object.entries(X.set)){let z=`#attr${U}`,j=`:val${U}`;$[z]=Q,Z[j]=this.marshallValue(L),_.push(`${z} = ${j}`),U++}Y.push(`SET ${_.join(", ")}`)}if(X.remove&&X.remove.length>0){let _=[];for(let Q of X.remove){let L=`#attr${U}`;$[L]=Q,_.push(L),U++}Y.push(`REMOVE ${_.join(", ")}`)}if(X.add&&Object.keys(X.add).length>0){let _=[];for(let[Q,L]of Object.entries(X.add)){let z=`#attr${U}`,j=`:val${U}`;$[z]=Q,Z[j]=this.marshallValue(L),_.push(`${z} ${j}`),U++}Y.push(`ADD ${_.join(", ")}`)}if(X.delete&&Object.keys(X.delete).length>0){let _=[];for(let[Q,L]of Object.entries(X.delete)){let z=`#attr${U}`,j=`:val${U}`;$[z]=Q,Z[j]=this.marshallValue(L),_.push(`${z} ${j}`),U++}Y.push(`DELETE ${_.join(", ")}`)}return{expression:Y.join(" "),expressionAttributeNames:$,expressionAttributeValues:Z}}buildProjectionExpression(X){let $={},Z=[];return X.forEach((Y,U)=>{let _=`#proj${U}`;$[_]=Y,Z.push(_)}),{expression:Z.join(", "),expressionAttributeNames:$}}marshall(X){let $={};for(let[Z,Y]of Object.entries(X))$[Z]=this.marshallValue(Y);return $}unmarshall(X){let $={};for(let[Z,Y]of Object.entries(X))$[Z]=this.unmarshallValue(Y);return $}interpolatePattern(X,$){return X.replace(/\$\{(\w+)\}/g,(Z,Y)=>{if(!(Y in $))throw Error(`Missing value for pattern key: ${Y}`);return String($[Y])})}buildExpression(X,$){let Z={},Y={},U=[];return X.forEach((_,Q)=>{let L=`#attr${Q}`;Z[L]=_.attribute;let z;switch(_.operator){case"=":case"<":case"<=":case">":case">=":{let j=`:val${Q}`;Y[j]=this.marshallValue(_.value),z=`${L} ${_.operator} ${j}`;break}case"BETWEEN":{let j=`:val${Q}a`,E=`:val${Q}b`;Y[j]=this.marshallValue(_.values?.[0]),Y[E]=this.marshallValue(_.values?.[1]),z=`${L} BETWEEN ${j} AND ${E}`;break}case"begins_with":{let j=`:val${Q}`;Y[j]=this.marshallValue(_.value),z=`begins_with(${L}, ${j})`;break}case"contains":{let j=`:val${Q}`;Y[j]=this.marshallValue(_.value),z=`contains(${L}, ${j})`;break}case"attribute_exists":z=`attribute_exists(${L})`;break;case"attribute_not_exists":z=`attribute_not_exists(${L})`;break;case"attribute_type":{let j=`:val${Q}`;Y[j]={S:_.value},z=`attribute_type(${L}, ${j})`;break}case"IN":{let j=(_.values??[]).map((E,W)=>`:val${Q}_${W}`);_.values?.forEach((E,W)=>{Y[`:val${Q}_${W}`]=this.marshallValue(E)}),z=`${L} IN (${j.join(", ")})`;break}default:throw Error(`Unknown operator: ${_.operator}`)}U.push(z)}),{expression:U.join(` ${$} `),expressionAttributeNames:Z,expressionAttributeValues:Y}}marshallValue(X){if(X===null||X===void 0)return{NULL:!0};if(typeof X==="string")return{S:X};if(typeof X==="number")return{N:String(X)};if(typeof X==="boolean")return{BOOL:X};if(X instanceof Uint8Array||Buffer.isBuffer(X))return{B:X};if(Array.isArray(X)){if(X.length===0)return{L:[]};let $=typeof X[0],Z=X.every((U)=>typeof U==="string"),Y=X.every((U)=>typeof U==="number");if(Z)return{SS:X};if(Y)return{NS:X.map(String)};return{L:X.map((U)=>this.marshallValue(U))}}if(typeof X==="object"){let $={};for(let[Z,Y]of Object.entries(X))$[Z]=this.marshallValue(Y);return{M:$}}return{S:String(X)}}unmarshallValue(X){if(!X||typeof X!=="object")return X;if("S"in X)return X.S;if("N"in X)return Number(X.N);if("BOOL"in X)return X.BOOL;if("NULL"in X)return null;if("B"in X)return X.B;if("SS"in X)return X.SS;if("NS"in X)return X.NS.map(Number);if("BS"in X)return X.BS;if("L"in X)return X.L.map(($)=>this.unmarshallValue($));if("M"in X){let $={};for(let[Z,Y]of Object.entries(X.M))$[Z]=this.unmarshallValue(Y);return $}return X}}function dX(X){return new S6(X)}async function oX(X,$){let Z=X instanceof ArrayBuffer?X:X.buffer.slice(X.byteOffset,X.byteOffset+X.byteLength),Y=await crypto.subtle.importKey("raw",Z,{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return crypto.subtle.sign("HMAC",Y,new TextEncoder().encode($))}async function T5(X){let $=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(X));return Array.from(new Uint8Array($)).map((Z)=>Z.toString(16).padStart(2,"0")).join("")}async function Q2(X,$,Z,Y){let U=await oX(new TextEncoder().encode(`AWS4${X}`),$),_=await oX(U,Z),Q=await oX(_,Y);return oX(Q,"aws4_request")}async function z2(X,$,Z,Y,U,_,Q){let z=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),j=z.slice(0,8),E=$.pathname,W=$.search.slice(1),G={...Z,host:$.host,"x-amz-date":z};if(U.sessionToken)G["x-amz-security-token"]=U.sessionToken;let J=Object.keys(G).sort(),V=J.map((d)=>`${d.toLowerCase()}:${G[d].trim()}`).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`,F=J.map((d)=>d.toLowerCase()).join(";"),R=await T5(Y),D=[X,E,W,V,F,R].join(`
|
|
5
|
-
`),q=await T5(D),C="AWS4-HMAC-SHA256",S=`${j}/${_}/${Q}/aws4_request`,P=[C,z,S,q].join(`
|
|
6
|
-
`),H=await Q2(U.secretAccessKey,j,_,Q),N=await oX(H,P),A=Array.from(new Uint8Array(N)).map((d)=>d.toString(16).padStart(2,"0")).join(""),h=`${C} Credential=${U.accessKeyId}/${S}, SignedHeaders=${F}, Signature=${A}`;return{...G,authorization:h}}class A6{config;endpoint;credentials;constructor(X){if(this.config=X,this.endpoint=X.endpoint??`https://dynamodb.${X.region}.amazonaws.com`,this.credentials=X.credentials??{accessKeyId:process.env.AWS_ACCESS_KEY_ID??"",secretAccessKey:process.env.AWS_SECRET_ACCESS_KEY??"",sessionToken:process.env.AWS_SESSION_TOKEN},!this.credentials.accessKeyId||!this.credentials.secretAccessKey)throw Error("AWS credentials not provided. Set credentials in config or AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY environment variables.")}async execute(X,$){let Z=new URL(this.endpoint),Y=JSON.stringify($),U={"content-type":"application/x-amz-json-1.0","x-amz-target":`DynamoDB_20120810.${X}`},_=await z2("POST",Z,U,Y,this.credentials,this.config.region,"dynamodb"),Q=await fetch(Z.toString(),{method:"POST",headers:_,body:Y});if(!Q.ok){let L=await Q.text(),z;try{let j=JSON.parse(L);z=j.message??j.Message??L}catch{z=L}throw Error(`DynamoDB ${X} failed: ${Q.status} - ${z}`)}return Q.json()}async query(X){return this.execute("Query",X)}async scan(X){return this.execute("Scan",X)}async getItem(X){return this.execute("GetItem",X)}async putItem(X){return this.execute("PutItem",X)}async updateItem(X){return this.execute("UpdateItem",X)}async deleteItem(X){return this.execute("DeleteItem",X)}async batchGetItem(X){return this.execute("BatchGetItem",X)}async batchWriteItem(X){return this.execute("BatchWriteItem",X)}async transactWriteItems(X){return this.execute("TransactWriteItems",X)}async describeTable(X){return this.execute("DescribeTable",{TableName:X})}async createTable(X){return this.execute("CreateTable",X)}async deleteTable(X){return this.execute("DeleteTable",{TableName:X})}async listTables(X){return this.execute("ListTables",X??{})}async updateTable(X){return this.execute("UpdateTable",X)}async updateTimeToLive(X){return this.execute("UpdateTimeToLive",X)}async describeTimeToLive(X){return this.execute("DescribeTimeToLive",{TableName:X})}}function k6(X){return new A6(X)}function tj(X){v9={...v9,...X},J$=null,W$=null}function s9(){if(!J$)J$=k6({region:v9.region??"us-east-1",endpoint:v9.endpoint,credentials:v9.credentials});return J$}function o9(){if(!W$)W$=dX({region:v9.region??"us-east-1",endpoint:v9.endpoint,credentials:v9.credentials});return W$}class L2{static tableName="";static pkAttribute="pk";static skAttribute="sk";static pkPrefix="";static skPrefix="METADATA";static entityTypeAttribute="_et";static keyDelimiter="#";static primaryKey="id";static timestamps=!0;static createdAtField="createdAt";static updatedAtField="updatedAt";_attributes={};_original={};_exists=!1;constructor(X={}){this._attributes={...X},this._original={...X};for(let[$,Z]of Object.entries(X))this[$]=Z}static query(){return new x6(this)}static async find(X){let $=this,Z=s9(),Y=o9(),U=`${$.pkPrefix}${$.keyDelimiter}${X}`,_=$.skPrefix;try{let Q=await Z.getItem({TableName:$.tableName,Key:Y.marshall({[$.pkAttribute]:U,[$.skAttribute]:_})});if(!Q.Item)return null;let L=Y.unmarshall(Q.Item),z=new $(L);return z._exists=!0,z}catch(Q){return console.error("Find error:",Q),null}}static async findOrFail(X){let $=await this.find(X);if(!$)throw Error(`${this.name} not found with id: ${X}`);return $}static async all(){return this.query().get()}static async create(X){let $=this,Z=s9(),Y=o9(),U=X[$.primaryKey];if(!U)throw Error(`${$.primaryKey} is required`);let _=`${$.pkPrefix}${$.keyDelimiter}${U}`,Q=$.skPrefix,L=new Date().toISOString(),z={...X,[$.pkAttribute]:_,[$.skAttribute]:Q,[$.entityTypeAttribute]:$.name};if($.timestamps)z[$.createdAtField]=L,z[$.updatedAtField]=L;await Z.putItem({TableName:$.tableName,Item:Y.marshall(z),ConditionExpression:`attribute_not_exists(${$.pkAttribute})`});let j=new $(z);return j._exists=!0,j}static async updateOrCreate(X,$){let Z=this,Y=X[Z.primaryKey],U=await Z.find(Y);if(U)return await U.update($),U;return Z.create({...X,...$})}static where(X,$,Z){return this.query().where(X,$,Z)}static wherePk(X){return this.query().wherePk(X)}getKey(){let X=this.constructor;return this[X.primaryKey]}getAttribute(X){return this._attributes[X]}setAttribute(X,$){return this._attributes[X]=$,this[X]=$,this}getAttributes(){return{...this._attributes}}isDirty(X){if(X)return this._attributes[X]!==this._original[X];return JSON.stringify(this._attributes)!==JSON.stringify(this._original)}getDirty(){let X={};for(let[$,Z]of Object.entries(this._attributes))if(Z!==this._original[$])X[$]=Z;return X}async save(){if(this._exists){let X=this.getDirty();if(Object.keys(X).length>0)await this.update(X)}else{let $=await this.constructor.create(this._attributes);this._attributes=$._attributes,this._original={...this._attributes},this._exists=!0}return this}async update(X){let $=this.constructor,Z=s9(),Y=o9(),U=this.getKey(),_=`${$.pkPrefix}${$.keyDelimiter}${U}`,Q=$.skPrefix,L=new Date().toISOString(),z={...X};if($.timestamps)z[$.updatedAtField]=L;let j=[],E={},W={},G=0;for(let[J,V]of Object.entries(z)){let F=`#attr${G}`,R=`:val${G}`;E[F]=J,W[R]=Y.marshall({v:V}).v,j.push(`${F} = ${R}`),G++}await Z.updateItem({TableName:$.tableName,Key:Y.marshall({[$.pkAttribute]:_,[$.skAttribute]:Q}),UpdateExpression:`SET ${j.join(", ")}`,ExpressionAttributeNames:E,ExpressionAttributeValues:W});for(let[J,V]of Object.entries(z))this._attributes[J]=V,this[J]=V;return this._original={...this._attributes},this}async delete(){let X=this.constructor,$=s9(),Z=o9(),Y=this.getKey(),U=`${X.pkPrefix}${X.keyDelimiter}${Y}`,_=X.skPrefix;return await $.deleteItem({TableName:X.tableName,Key:Z.marshall({[X.pkAttribute]:U,[X.skAttribute]:_})}),this._exists=!1,!0}async refresh(){let $=await this.constructor.find(this.getKey());if($){this._attributes=$._attributes,this._original={...this._attributes};for(let[Z,Y]of Object.entries(this._attributes))this[Z]=Y}return this}toObject(){let X=this.constructor,$={...this._attributes};return delete $[X.pkAttribute],delete $[X.skAttribute],delete $[X.entityTypeAttribute],$}toJSON(){return this.toObject()}}class x6{ModelClass;_pkValue;_skCondition;_indexName;_filterConditions=[];_projectionAttrs=[];_limitValue;_scanForward=!0;_consistentReadValue=!1;_startKey;constructor(X){this.ModelClass=X}wherePk(X){return this._pkValue=`${this.ModelClass.pkPrefix}${this.ModelClass.keyDelimiter}${X}`,this}where(X,$,Z){if(Z===void 0)this._filterConditions.push({attribute:X,operator:"=",value:$});else this._filterConditions.push({attribute:X,operator:$,value:Z});return this}whereIn(X,$){return this._filterConditions.push({attribute:X,operator:"IN",values:$}),this}whereBetween(X,$,Z){return this._filterConditions.push({attribute:X,operator:"BETWEEN",value:$,values:[$,Z]}),this}whereBeginsWith(X,$){return this._filterConditions.push({attribute:X,operator:"begins_with",value:$}),this}whereExists(X){return this._filterConditions.push({attribute:X,operator:"attribute_exists"}),this}whereNotExists(X){return this._filterConditions.push({attribute:X,operator:"attribute_not_exists"}),this}orderBy(X){return this._scanForward=X==="asc",this}limit(X){return this._limitValue=X,this}select(...X){return this._projectionAttrs.push(...X),this}index(X){return this._indexName=X,this}consistentRead(){return this._consistentReadValue=!0,this}startFrom(X){return this._startKey=X,this}buildRequest(){let X=o9(),$={TableName:this.ModelClass.tableName};if(this._indexName)$.IndexName=this._indexName;let Z={},Y={},U=0,_=[];if(this._pkValue){let Q=`#pk${U}`,L=`:pk${U}`;Z[Q]=this.ModelClass.pkAttribute,Y[L]={S:this._pkValue},_.push(`${Q} = ${L}`),U++}if(this._skCondition){let Q=`#sk${U}`;switch(Z[Q]=this.ModelClass.skAttribute,this._skCondition.type){case"eq":{let L=`:sk${U}`;Y[L]={S:this._skCondition.value},_.push(`${Q} = ${L}`);break}case"begins_with":{let L=`:sk${U}`;Y[L]={S:this._skCondition.value},_.push(`begins_with(${Q}, ${L})`);break}}U++}if(_.length>0)$.KeyConditionExpression=_.join(" AND ");if(this._filterConditions.length>0){let Q=[];for(let L of this._filterConditions){let z=`#flt${U}`;if(Z[z]=L.attribute,L.operator==="attribute_exists")Q.push(`attribute_exists(${z})`);else if(L.operator==="attribute_not_exists")Q.push(`attribute_not_exists(${z})`);else if(L.operator==="IN"&&L.values){let j=L.values.map((E,W)=>`:flt${U}_${W}`);L.values.forEach((E,W)=>{Y[`:flt${U}_${W}`]=X.marshall({v:E}).v}),Q.push(`${z} IN (${j.join(", ")})`)}else if(L.operator==="BETWEEN"&&L.values){let j=`:flt${U}a`,E=`:flt${U}b`;Y[j]=X.marshall({v:L.values[0]}).v,Y[E]=X.marshall({v:L.values[1]}).v,Q.push(`${z} BETWEEN ${j} AND ${E}`)}else if(L.operator==="begins_with"){let j=`:flt${U}`;Y[j]=X.marshall({v:L.value}).v,Q.push(`begins_with(${z}, ${j})`)}else{let j=`:flt${U}`;Y[j]=X.marshall({v:L.value}).v,Q.push(`${z} ${L.operator} ${j}`)}U++}$.FilterExpression=Q.join(" AND ")}if(this._projectionAttrs.length>0){let Q=[];for(let L of this._projectionAttrs){let z=`#proj${U}`;Z[z]=L,Q.push(z),U++}$.ProjectionExpression=Q.join(", ")}if(Object.keys(Z).length>0)$.ExpressionAttributeNames=Z;if(Object.keys(Y).length>0)$.ExpressionAttributeValues=Y;if(this._limitValue!==void 0)$.Limit=this._limitValue;if($.ScanIndexForward=this._scanForward,this._consistentReadValue)$.ConsistentRead=!0;if(this._startKey)$.ExclusiveStartKey=X.marshall(this._startKey);return $}async get(){let X=s9(),$=o9(),Z=this.buildRequest();return((this._pkValue!==void 0?await X.query(Z):await X.scan(Z)).Items??[]).map((Q)=>{let L=$.unmarshall(Q),z=new this.ModelClass(L);return z._exists=!0,z})}async first(){return this._limitValue=1,(await this.get())[0]??null}async count(){let X=s9(),$=this.buildRequest();return $.Select="COUNT",(this._pkValue!==void 0?await X.query($):await X.scan($)).Count??0}async paginate(X,$){let Z=o9();if($)this._startKey=$;this._limitValue=X;let Y=s9(),U=this.buildRequest(),Q=this._pkValue!==void 0?await Y.query(U):await Y.scan(U);return{items:(Q.Items??[]).map((z)=>{let j=Z.unmarshall(z),E=new this.ModelClass(j);return E._exists=!0,E}),lastKey:Q.LastEvaluatedKey?Z.unmarshall(Q.LastEvaluatedKey):void 0}}}var v9,J$=null,W$=null,j2=e(()=>{v9={region:process.env.AWS_REGION??"us-east-1"}});function A$(X){let $=JSON.stringify({tableName:X.tableName,keySchema:X.keySchema,attributeDefinitions:[...X.attributeDefinitions||[]].sort((Y,U)=>Y.name.localeCompare(U.name)),globalSecondaryIndexes:[...X.globalSecondaryIndexes||[]].sort((Y,U)=>Y.indexName.localeCompare(U.indexName)),localSecondaryIndexes:[...X.localSecondaryIndexes||[]].sort((Y,U)=>Y.indexName.localeCompare(U.indexName)),billingMode:X.billingMode,ttlAttribute:X.ttlAttribute,streamSpecification:X.streamSpecification}),Z=0;for(let Y=0;Y<$.length;Y++){let U=$.charCodeAt(Y);Z=(Z<<5)-Z+U,Z=Z&Z}return Math.abs(Z).toString(16).padStart(8,"0")}function E2(X){let $=G2(X);return F2($)}function G2(X){return{tableName:X.tableName||"",pkAttribute:X.pkAttribute||"pk",skAttribute:X.skAttribute||"sk",pkPrefix:X.pkPrefix||"",skPrefix:X.skPrefix||"METADATA",entityTypeAttribute:X.entityTypeAttribute||"_et",timestamps:X.timestamps!==!1,ttlAttribute:X.ttlAttribute,gsis:X.gsis,lsis:X.lsis,billingMode:X.billingMode||"PAY_PER_REQUEST",provisionedThroughput:X.provisionedThroughput,streamEnabled:X.streamEnabled,streamViewType:X.streamViewType}}function F2(X){let $=[{name:X.pkAttribute,type:"S"},{name:X.skAttribute,type:"S"}],Z=[];if(X.gsis)for(let Y of X.gsis){if(!$.some((U)=>U.name===Y.pkAttribute))$.push({name:Y.pkAttribute,type:"S"});if(Y.skAttribute&&!$.some((U)=>U.name===Y.skAttribute))$.push({name:Y.skAttribute,type:"S"});Z.push({indexName:Y.indexName,keySchema:{partitionKey:Y.pkAttribute,sortKey:Y.skAttribute},projection:{type:Array.isArray(Y.projection)?"INCLUDE":Y.projection||"ALL",nonKeyAttributes:Array.isArray(Y.projection)?Y.projection:void 0},provisionedThroughput:Y.provisionedThroughput})}return{tableName:X.tableName,keySchema:{partitionKey:X.pkAttribute,sortKey:X.skAttribute},attributeDefinitions:$,globalSecondaryIndexes:Z.length>0?Z:void 0,billingMode:X.billingMode,provisionedThroughput:X.provisionedThroughput,ttlAttribute:X.ttlAttribute,streamSpecification:X.streamEnabled?{enabled:!0,viewType:X.streamViewType||"NEW_AND_OLD_IMAGES"}:void 0}}function O2(X,$){let Z=[],Y=$.tableName;if(!X)Z.push({type:"CREATE_TABLE",tableName:Y,details:{definition:$}});else{let U=X.keySchema.partitionKey!==$.keySchema.partitionKey,_=X.keySchema.sortKey!==$.keySchema.sortKey;if(U||_)console.warn(`[Migration] Table ${Y}: Key schema changes require table recreation. Current: pk=${X.keySchema.partitionKey}, sk=${X.keySchema.sortKey}. Target: pk=${$.keySchema.partitionKey}, sk=${$.keySchema.sortKey}. This operation is not supported automatically.`);let Q=X.globalSecondaryIndexes||[],L=$.globalSecondaryIndexes||[],z=new Set(Q.map((G)=>G.indexName)),j=new Set(L.map((G)=>G.indexName));for(let G of L)if(!z.has(G.indexName))Z.push({type:"ADD_GSI",tableName:Y,details:{gsi:G}});for(let G of Q)if(!j.has(G.indexName))Z.push({type:"DELETE_GSI",tableName:Y,details:{indexName:G.indexName}});if(X.billingMode!==$.billingMode&&$.billingMode)Z.push({type:"UPDATE_BILLING_MODE",tableName:Y,details:{billingMode:$.billingMode,provisionedThroughput:$.provisionedThroughput}});if(X.ttlAttribute!==$.ttlAttribute)Z.push({type:"UPDATE_TTL",tableName:Y,details:{ttlAttribute:$.ttlAttribute||null,enabled:!!$.ttlAttribute}});let E=X.streamSpecification?.enabled,W=$.streamSpecification?.enabled;if(E!==W)if(W)Z.push({type:"ENABLE_STREAM",tableName:Y,details:{viewType:$.streamSpecification?.viewType||"NEW_AND_OLD_IMAGES"}});else Z.push({type:"DISABLE_STREAM",tableName:Y,details:{}})}return{tableName:Y,operations:Z,timestamp:new Date().toISOString(),hash:A$($)}}function ej(X,$){return A$(X)===A$($)}class B6{client;initialized=!1;constructor(X){this.client=X}async ensureMigrationsTable(){if(this.initialized)return;try{await this.client.describeTable(D9),this.initialized=!0}catch(X){if(X.message?.includes("ResourceNotFoundException")||X.message?.includes("not found"))console.log(`[Migration] Creating migrations table: ${D9}`),await this.client.createTable({TableName:D9,KeySchema:[{AttributeName:"pk",KeyType:"HASH"},{AttributeName:"sk",KeyType:"RANGE"}],AttributeDefinitions:[{AttributeName:"pk",AttributeType:"S"},{AttributeName:"sk",AttributeType:"S"}],BillingMode:"PAY_PER_REQUEST"}),await this.waitForTableActive(D9),this.initialized=!0;else throw X}}async waitForTableActive(X,$=30){for(let Z=0;Z<$;Z++){try{if((await this.client.describeTable(X)).Table?.TableStatus==="ACTIVE")return}catch{}await new Promise((Y)=>setTimeout(Y,1000))}throw Error(`Table ${X} did not become active within ${$} seconds`)}async getLatestState(X){await this.ensureMigrationsTable();let $=`${uX}#${X}`,Z=await this.client.query({TableName:D9,KeyConditionExpression:"pk = :pk",ExpressionAttributeValues:{":pk":{S:$}},ScanIndexForward:!1,Limit:1});if(!Z.Items||Z.Items.length===0)return null;return this.unmarshallState(Z.Items[0])}async getHistory(X){await this.ensureMigrationsTable();let $=`${uX}#${X}`,Z=await this.client.query({TableName:D9,KeyConditionExpression:"pk = :pk",ExpressionAttributeValues:{":pk":{S:$}},ScanIndexForward:!1});if(!Z.Items)return[];return Z.Items.map((Y)=>this.unmarshallState(Y))}async recordMigration(X,$,Z){await this.ensureMigrationsTable();let Y=await this.getLatestState(X),U=Z??(Y?Y.version+1:1),_=`${uX}#${X}`,Q=`${N5}#${String(U).padStart(6,"0")}`,L={tableName:X,hash:A$($),definition:$,appliedAt:new Date().toISOString(),version:U};return await this.client.putItem({TableName:D9,Item:this.marshallState(L,_,Q)}),console.log(`[Migration] Recorded migration for ${X} (version ${U})`),L}async listTrackedTables(){await this.ensureMigrationsTable();let X=await this.client.scan({TableName:D9,ProjectionExpression:"pk"});if(!X.Items)return[];let $=new Set;for(let Z of X.Items){let U=(Z.pk?.S||"").replace(`${uX}#`,"");if(U)$.add(U)}return Array.from($)}async hasMigrations(X){return await this.getLatestState(X)!==null}async deleteMigrationHistory(X){await this.ensureMigrationsTable();let $=await this.getHistory(X),Z=`${uX}#${X}`;for(let Y of $){let U=`${N5}#${String(Y.version).padStart(6,"0")}`;await this.client.deleteItem({TableName:D9,Key:{pk:{S:Z},sk:{S:U}}})}console.log(`[Migration] Deleted migration history for ${X}`)}marshallState(X,$,Z){return{pk:{S:$},sk:{S:Z},tableName:{S:X.tableName},hash:{S:X.hash},definition:{S:JSON.stringify(X.definition)},appliedAt:{S:X.appliedAt},version:{N:String(X.version)}}}unmarshallState(X){return{tableName:X.tableName?.S||"",hash:X.hash?.S||"",definition:JSON.parse(X.definition?.S||"{}"),appliedAt:X.appliedAt?.S||"",version:Number(X.version?.N||0)}}}var D9="_qb_migrations",uX="MIGRATION",N5="VERSION",y6=()=>{};class h6{client;tracker;config;constructor(X){this.config=X,this.client=k6({region:X.region,endpoint:X.endpoint,credentials:X.credentials}),this.tracker=new B6(this.client)}async execute(X){let $={tableName:X.tableName,success:!0,operations:[]};if(X.operations.length===0)return this.log(`[Migration] No changes needed for ${X.tableName}`),$;this.log(`[Migration] Executing ${X.operations.length} operations for ${X.tableName}`);try{for(let Z of X.operations)await this.executeOperation(Z),$.operations.push(Z.type);this.log(`[Migration] Successfully applied ${$.operations.length} operations to ${X.tableName}`)}catch(Z){$.success=!1,$.error=Z.message,console.error(`[Migration] Failed to execute migration for ${X.tableName}:`,Z)}return $}async executeOperation(X){if(this.log(`[Migration] Executing ${X.type} on ${X.tableName}`),this.config.dryRun){this.log(`[Migration] DRY RUN: Would execute ${X.type}`,X.details);return}switch(X.type){case"CREATE_TABLE":await this.createTable(X.details.definition);break;case"DELETE_TABLE":await this.deleteTable(X.tableName);break;case"ADD_GSI":await this.addGSI(X.tableName,X.details.gsi);break;case"DELETE_GSI":await this.deleteGSI(X.tableName,X.details.indexName);break;case"UPDATE_TTL":await this.updateTTL(X.tableName,X.details.ttlAttribute,X.details.enabled);break;case"UPDATE_BILLING_MODE":await this.updateBillingMode(X.tableName,X.details.billingMode,X.details.provisionedThroughput);break;case"ENABLE_STREAM":await this.enableStream(X.tableName,X.details.viewType);break;case"DISABLE_STREAM":await this.disableStream(X.tableName);break;default:throw Error(`Unknown migration operation type: ${X.type}`)}}async createTable(X){let $={TableName:X.tableName,KeySchema:[{AttributeName:X.keySchema.partitionKey,KeyType:"HASH"}],AttributeDefinitions:X.attributeDefinitions.map((Z)=>({AttributeName:Z.name,AttributeType:Z.type})),BillingMode:X.billingMode||"PAY_PER_REQUEST"};if(X.keySchema.sortKey)$.KeySchema.push({AttributeName:X.keySchema.sortKey,KeyType:"RANGE"});if(X.billingMode==="PROVISIONED"&&X.provisionedThroughput)$.ProvisionedThroughput={ReadCapacityUnits:X.provisionedThroughput.readCapacityUnits,WriteCapacityUnits:X.provisionedThroughput.writeCapacityUnits};if(X.globalSecondaryIndexes&&X.globalSecondaryIndexes.length>0)$.GlobalSecondaryIndexes=X.globalSecondaryIndexes.map((Z)=>({IndexName:Z.indexName,KeySchema:[{AttributeName:Z.keySchema.partitionKey,KeyType:"HASH"},...Z.keySchema.sortKey?[{AttributeName:Z.keySchema.sortKey,KeyType:"RANGE"}]:[]],Projection:{ProjectionType:Z.projection.type,...Z.projection.nonKeyAttributes?{NonKeyAttributes:Z.projection.nonKeyAttributes}:{}},...Z.provisionedThroughput?{ProvisionedThroughput:{ReadCapacityUnits:Z.provisionedThroughput.readCapacityUnits,WriteCapacityUnits:Z.provisionedThroughput.writeCapacityUnits}}:{}}));if(X.localSecondaryIndexes&&X.localSecondaryIndexes.length>0)$.LocalSecondaryIndexes=X.localSecondaryIndexes.map((Z)=>({IndexName:Z.indexName,KeySchema:[{AttributeName:X.keySchema.partitionKey,KeyType:"HASH"},{AttributeName:Z.sortKey,KeyType:"RANGE"}],Projection:{ProjectionType:Z.projection.type,...Z.projection.nonKeyAttributes?{NonKeyAttributes:Z.projection.nonKeyAttributes}:{}}}));if(X.streamSpecification?.enabled)$.StreamSpecification={StreamEnabled:!0,StreamViewType:X.streamSpecification.viewType||"NEW_AND_OLD_IMAGES"};if(this.log(`[Migration] Creating table: ${X.tableName}`),await this.client.createTable($),await this.waitForTableActive(X.tableName),X.ttlAttribute)await this.updateTTL(X.tableName,X.ttlAttribute,!0);this.log(`[Migration] Table created: ${X.tableName}`)}async deleteTable(X){this.log(`[Migration] Deleting table: ${X}`),await this.client.deleteTable(X),this.log(`[Migration] Table deleted: ${X}`)}async addGSI(X,$){this.log(`[Migration] Adding GSI ${$.indexName} to ${X}`);let Z=await this.client.describeTable(X),Y=new Set(Z.Table?.AttributeDefinitions?.map((Q)=>Q.AttributeName)||[]),U=[];if(!Y.has($.keySchema.partitionKey))U.push({AttributeName:$.keySchema.partitionKey,AttributeType:"S"});if($.keySchema.sortKey&&!Y.has($.keySchema.sortKey))U.push({AttributeName:$.keySchema.sortKey,AttributeType:"S"});let _={TableName:X,AttributeDefinitions:U.length>0?U:void 0,GlobalSecondaryIndexUpdates:[{Create:{IndexName:$.indexName,KeySchema:[{AttributeName:$.keySchema.partitionKey,KeyType:"HASH"},...$.keySchema.sortKey?[{AttributeName:$.keySchema.sortKey,KeyType:"RANGE"}]:[]],Projection:{ProjectionType:$.projection.type,...$.projection.nonKeyAttributes?{NonKeyAttributes:$.projection.nonKeyAttributes}:{}},...$.provisionedThroughput?{ProvisionedThroughput:{ReadCapacityUnits:$.provisionedThroughput.readCapacityUnits,WriteCapacityUnits:$.provisionedThroughput.writeCapacityUnits}}:{}}}]};await this.executeUpdateTable(_),await this.waitForGSIActive(X,$.indexName),this.log(`[Migration] GSI ${$.indexName} added to ${X}`)}async deleteGSI(X,$){this.log(`[Migration] Deleting GSI ${$} from ${X}`);let Z={TableName:X,GlobalSecondaryIndexUpdates:[{Delete:{IndexName:$}}]};await this.executeUpdateTable(Z),this.log(`[Migration] GSI ${$} deleted from ${X}`)}async updateTTL(X,$,Z){this.log(`[Migration] Updating TTL on ${X}: ${Z?$:"disabled"}`);let Y={TableName:X,TimeToLiveSpecification:{Enabled:Z,AttributeName:$||"ttl"}};await this.executeUpdateTimeToLive(Y),this.log(`[Migration] TTL updated on ${X}`)}async updateBillingMode(X,$,Z){this.log(`[Migration] Updating billing mode on ${X} to ${$}`);let Y={TableName:X,BillingMode:$};if($==="PROVISIONED"&&Z)Y.ProvisionedThroughput={ReadCapacityUnits:Z.readCapacityUnits,WriteCapacityUnits:Z.writeCapacityUnits};await this.executeUpdateTable(Y),await this.waitForTableActive(X),this.log(`[Migration] Billing mode updated on ${X}`)}async enableStream(X,$){this.log(`[Migration] Enabling stream on ${X} with view type ${$}`);let Z={TableName:X,StreamSpecification:{StreamEnabled:!0,StreamViewType:$}};await this.executeUpdateTable(Z),await this.waitForTableActive(X),this.log(`[Migration] Stream enabled on ${X}`)}async disableStream(X){this.log(`[Migration] Disabling stream on ${X}`);let $={TableName:X,StreamSpecification:{StreamEnabled:!1}};await this.executeUpdateTable($),await this.waitForTableActive(X),this.log(`[Migration] Stream disabled on ${X}`)}async executeUpdateTable(X){await this.client.updateTable(X)}async executeUpdateTimeToLive(X){await this.client.updateTimeToLive(X)}async waitForTableActive(X,$=60){this.log(`[Migration] Waiting for table ${X} to become active...`);for(let Z=0;Z<$;Z++){try{let U=(await this.client.describeTable(X)).Table?.TableStatus;if(U==="ACTIVE")return;this.log(`[Migration] Table status: ${U}, waiting...`)}catch{}await new Promise((Y)=>setTimeout(Y,2000))}throw Error(`Table ${X} did not become active within ${$*2} seconds`)}async waitForGSIActive(X,$,Z=120){this.log(`[Migration] Waiting for GSI ${$} to become active...`);for(let Y=0;Y<Z;Y++){try{let _=(await this.client.describeTable(X)).Table?.GlobalSecondaryIndexes?.find((L)=>L.IndexName===$);if(_?.IndexStatus==="ACTIVE")return;let Q=_?.IndexStatus||"CREATING";this.log(`[Migration] GSI status: ${Q}, waiting...`)}catch{}await new Promise((U)=>setTimeout(U,5000))}throw Error(`GSI ${$} did not become active within ${Z*5} seconds`)}async migrateModel(X){let $=E2(X),Z=null;try{let _=await this.client.describeTable($.tableName);if(_.Table)Z=this.tableInfoToDefinition(_.Table)}catch(_){if(!_.message?.includes("ResourceNotFoundException")&&!_.message?.includes("not found"))throw _}let Y=O2(Z,$),U=await this.execute(Y);if(U.success&&!this.config.dryRun)U.state=await this.tracker.recordMigration($.tableName,$);return U}async migrateModels(X){let $=[];for(let Z of X)try{let Y=await this.migrateModel(Z);$.push(Y)}catch(Y){$.push({tableName:Z.tableName||"unknown",success:!1,operations:[],error:Y.message})}return $}async getStatus(){let X=new Map,$=await this.tracker.listTrackedTables();for(let Z of $){let Y=await this.tracker.getLatestState(Z);X.set(Z,Y)}return X}tableInfoToDefinition(X){let $={partitionKey:"",sortKey:void 0};for(let U of X.KeySchema||[])if(U.KeyType==="HASH")$.partitionKey=U.AttributeName;else if(U.KeyType==="RANGE")$.sortKey=U.AttributeName;let Z=(X.AttributeDefinitions||[]).map((U)=>({name:U.AttributeName,type:U.AttributeType})),Y=(X.GlobalSecondaryIndexes||[]).map((U)=>{let _={partitionKey:"",sortKey:void 0};for(let Q of U.KeySchema||[])if(Q.KeyType==="HASH")_.partitionKey=Q.AttributeName;else if(Q.KeyType==="RANGE")_.sortKey=Q.AttributeName;return{indexName:U.IndexName,keySchema:_,projection:{type:U.Projection?.ProjectionType||"ALL",nonKeyAttributes:U.Projection?.NonKeyAttributes},provisionedThroughput:U.ProvisionedThroughput?{readCapacityUnits:U.ProvisionedThroughput.ReadCapacityUnits,writeCapacityUnits:U.ProvisionedThroughput.WriteCapacityUnits}:void 0}});return{tableName:X.TableName,keySchema:$,attributeDefinitions:Z,globalSecondaryIndexes:Y.length>0?Y:void 0,billingMode:X.BillingModeSummary?.BillingMode||"PAY_PER_REQUEST",provisionedThroughput:X.ProvisionedThroughput?{readCapacityUnits:X.ProvisionedThroughput.ReadCapacityUnits,writeCapacityUnits:X.ProvisionedThroughput.WriteCapacityUnits}:void 0,ttlAttribute:X.TimeToLiveDescription?.AttributeName,streamSpecification:X.StreamSpecification?{enabled:X.StreamSpecification.StreamEnabled,viewType:X.StreamSpecification.StreamViewType}:void 0}}log(...X){if(this.config.verbose||this.config.dryRun)console.log(...X)}}function J2(X){return new h6(X)}async function XE(X,$){return J2($).migrateModels(X)}var W2=e(()=>{y6()});class v6{driver;client;tableName;pkAttribute;skAttribute;entityTypeAttr;delimiter;_entityType;_pkValue;_skCondition;_indexName;_projectionAttrs=[];_filterConditions=[];_limitValue;_scanForward=!0;_consistentRead=!1;_startKey;constructor(X,$,Z,Y){this.driver=X,this.client=$,this.tableName=Z,this.pkAttribute=Y.pkAttribute,this.skAttribute=Y.skAttribute,this.entityTypeAttr=Y.entityTypeAttribute,this.delimiter=Y.keyDelimiter}entity(X){return this._entityType=X,this}pk(X){return this._pkValue=X,this}get sk(){let X=this;return{equals($){return X._skCondition={type:"eq",value:$},X},beginsWith($){return X._skCondition={type:"begins_with",value:$},X},between($,Z){return X._skCondition={type:"between",value:$,value2:Z},X},lt($){return X._skCondition={type:"lt",value:$},X},lte($){return X._skCondition={type:"lte",value:$},X},gt($){return X._skCondition={type:"gt",value:$},X},gte($){return X._skCondition={type:"gte",value:$},X}}}index(X){return this._indexName=X,this}project(...X){return this._projectionAttrs.push(...X),this}filter(X,$,Z){return this._filterConditions.push({attribute:X,operator:$,value:Z}),this}where(X,$){return this.filter(X,"=",$)}whereIn(X,$){return this._filterConditions.push({attribute:X,operator:"IN",values:$}),this}limit(X){return this._limitValue=X,this}asc(){return this._scanForward=!0,this}desc(){return this._scanForward=!1,this}consistent(){return this._consistentRead=!0,this}startFrom(X){return this._startKey=X,this}toRequest(){let X={TableName:this.tableName};if(this._indexName)X.IndexName=this._indexName;let $=[],Z={},Y={},U=0;if(this._pkValue){let _=`#pk${U}`,Q=`:pk${U}`;Z[_]=this.pkAttribute,Y[Q]={S:this._pkValue},$.push(`${_} = ${Q}`),U++}if(this._skCondition){let _=`#sk${U}`;switch(Z[_]=this.skAttribute,this._skCondition.type){case"eq":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`${_} = ${Q}`);break}case"begins_with":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`begins_with(${_}, ${Q})`);break}case"between":{let Q=`:sk${U}a`,L=`:sk${U}b`;Y[Q]={S:this._skCondition.value},Y[L]={S:this._skCondition.value2},$.push(`${_} BETWEEN ${Q} AND ${L}`);break}case"lt":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`${_} < ${Q}`);break}case"lte":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`${_} <= ${Q}`);break}case"gt":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`${_} > ${Q}`);break}case"gte":{let Q=`:sk${U}`;Y[Q]={S:this._skCondition.value},$.push(`${_} >= ${Q}`);break}}U++}if($.length>0)X.KeyConditionExpression=$.join(" AND ");if(this._filterConditions.length>0){let _=[];for(let Q of this._filterConditions){let L=`#flt${U}`;if(Z[L]=Q.attribute,Q.operator==="IN"&&Q.values){let z=Q.values.map((j,E)=>`:flt${U}_${E}`);Q.values.forEach((j,E)=>{Y[`:flt${U}_${E}`]=this.driver.marshall({v:j}).v}),_.push(`${L} IN (${z.join(", ")})`)}else{let z=`:flt${U}`;Y[z]=this.driver.marshall({v:Q.value}).v,_.push(`${L} ${Q.operator} ${z}`)}U++}X.FilterExpression=_.join(" AND ")}if(this._projectionAttrs.length>0){let _=[];for(let Q of this._projectionAttrs){let L=`#proj${U}`;Z[L]=Q,_.push(L),U++}X.ProjectionExpression=_.join(", ")}if(Object.keys(Z).length>0)X.ExpressionAttributeNames=Z;if(Object.keys(Y).length>0)X.ExpressionAttributeValues=Y;if(this._limitValue!==void 0)X.Limit=this._limitValue;if(X.ScanIndexForward=this._scanForward,this._consistentRead)X.ConsistentRead=!0;if(this._startKey)X.ExclusiveStartKey=this.driver.marshall(this._startKey);return X}async get(){if(!this.client)throw Error("DynamoDB client not configured. Call dynamo.connection() first.");let X=this.toRequest();return((this._pkValue!==void 0?await this.client.query(X):await this.client.scan(X)).Items??[]).map((Y)=>this.driver.unmarshall(Y))}async first(){return this._limitValue=1,(await this.get())[0]}async getAll(){let X=[],$;do{if($)this._startKey=$;let Z=this.toRequest(),U=this._pkValue!==void 0?await this.client.query(Z):await this.client.scan(Z),_=(U.Items??[]).map((Q)=>this.driver.unmarshall(Q));X.push(..._),$=U.LastEvaluatedKey?this.driver.unmarshall(U.LastEvaluatedKey):void 0}while($);return X}async count(){if(!this.client)throw Error("DynamoDB client not configured. Call dynamo.connection() first.");let X=this.toRequest();return X.Select="COUNT",(this._pkValue!==void 0?await this.client.query(X):await this.client.scan(X)).Count??0}}class t1{driver;client;tableName="";pkAttribute="pk";skAttribute="sk";entityTypeAttr="_et";delimiter="#";entityMappings=new Map;connection(X){let $={region:X.region,tableName:X.table,endpoint:X.endpoint,credentials:X.credentials};return this.driver=dX($),this.tableName=X.table,this.pkAttribute=X.pkAttribute??"pk",this.skAttribute=X.skAttribute??"sk",this.entityTypeAttr=X.entityTypeAttribute??"_et",this.delimiter=X.keyDelimiter??"#",this}setClient(X){return this.client=X,this}registerEntity(X){if(this.entityMappings.set(X.entityType,X),this.driver)this.driver.registerEntity(X);return this}entity(X){if(!this.driver)throw Error("DynamoDB not configured. Call dynamo.connection() first.");return new v6(this.driver,this.client,this.tableName,{pkAttribute:this.pkAttribute,skAttribute:this.skAttribute,entityTypeAttribute:this.entityTypeAttr,keyDelimiter:this.delimiter}).entity(X)}async batchWrite(X){if(!this.client)throw Error("DynamoDB client not configured. Call setClient() first.");if(!this.driver)throw Error("DynamoDB not configured. Call dynamo.connection() first.");let $=[];for(let Z of X)if(Z.put){let Y={...Z.put.item,[this.entityTypeAttr]:Z.put.entity};$.push({PutRequest:{Item:this.driver.marshall(Y)}})}else if(Z.delete)$.push({DeleteRequest:{Key:this.driver.marshall({[this.pkAttribute]:Z.delete.pk,[this.skAttribute]:Z.delete.sk})}});if($.length>0)await this.client.batchWriteItem({RequestItems:{[this.tableName]:$}})}async transactWrite(X){if(!this.client)throw Error("DynamoDB client not configured. Call setClient() first.");if(!this.driver)throw Error("DynamoDB not configured. Call dynamo.connection() first.");let $=[];for(let Z of X)if(Z.put){let Y={...Z.put.item,[this.entityTypeAttr]:Z.put.entity},U={Put:{TableName:this.tableName,Item:this.driver.marshall(Y)}};if(Z.put.condition)U.Put.ConditionExpression=Z.put.condition;$.push(U)}else if(Z.update){let Y={[this.pkAttribute]:Z.update.pk};if(Z.update.sk)Y[this.skAttribute]=Z.update.sk;let U=[],_={},Q={},L=0;if(Z.update.set){let z=[];for(let[j,E]of Object.entries(Z.update.set)){let W=`#set${L}`,G=`:set${L}`;_[W]=j,Q[G]=this.driver.marshall({v:E}).v,z.push(`${W} = ${G}`),L++}if(z.length>0)U.push(`SET ${z.join(", ")}`)}if(Z.update.add){let z=[];for(let[j,E]of Object.entries(Z.update.add)){let W=`#add${L}`,G=`:add${L}`;_[W]=j,Q[G]={N:String(E)},z.push(`${W} ${G}`),L++}if(z.length>0)U.push(`ADD ${z.join(", ")}`)}if(Z.update.remove&&Z.update.remove.length>0){let z=[];for(let j of Z.update.remove){let E=`#rem${L}`;_[E]=j,z.push(E),L++}U.push(`REMOVE ${z.join(", ")}`)}$.push({Update:{TableName:this.tableName,Key:this.driver.marshall(Y),UpdateExpression:U.join(" "),ExpressionAttributeNames:_,ExpressionAttributeValues:Q}})}else if(Z.delete){let Y={Delete:{TableName:this.tableName,Key:this.driver.marshall({[this.pkAttribute]:Z.delete.pk,[this.skAttribute]:Z.delete.sk})}};if(Z.delete.condition)Y.Delete.ConditionExpression=Z.delete.condition;$.push(Y)}else if(Z.conditionCheck)$.push({ConditionCheck:{TableName:this.tableName,Key:this.driver.marshall({[this.pkAttribute]:Z.conditionCheck.pk,[this.skAttribute]:Z.conditionCheck.sk}),ConditionExpression:Z.conditionCheck.condition}});if($.length>0)await this.client.transactWriteItems({TransactItems:$})}getDriver(){return this.driver}}function $E(){return new t1}var V2,I2=e(()=>{j2(),W2(),y6(),V2=new t1});class g6{cache=new Map;totalHits=0;totalMisses=0;options;constructor(X={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...X}}generateKey(X,$){let Z=$?`:${$}`:"";return`${this.options.keyPrefix}${X}${Z}`}isExpired(X){return Date.now()-X.timestamp.getTime()>X.ttl}estimateSize(X){try{return JSON.stringify(X).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let X=Array.from(this.cache.entries()).sort(([,Z],[,Y])=>Z.timestamp.getTime()-Y.timestamp.getTime()),$=X.length-this.options.maxSize+1;for(let Z=0;Z<$;Z++)this.cache.delete(X[Z][0])}set(X,$,Z,Y){if(!this.options.enabled)return;let U=this.generateKey(X,Z),_=Y??this.options.ttl,Q=this.estimateSize($);this.cache.set(U,{value:$,timestamp:new Date,ttl:_,hits:0,size:Q}),this.evictIfNeeded()}get(X,$){if(!this.options.enabled){this.totalMisses++;return}let Z=this.generateKey(X,$),Y=this.cache.get(Z);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(Z),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified(X,$){try{if(!S5(X))return!0;return A5(X).mtime>$}catch{return!0}}getWithFileCheck(X,$){let Z=this.get(X,$);if(!Z)return;if(this.isFileModified($,Z.fileTimestamp)){this.delete(X,$);return}return Z.value}setWithFileCheck(X,$,Z,Y){try{let U=S5(Z)?A5(Z):null,_=U?U.mtime:new Date;this.set(X,{value:$,fileTimestamp:_},Z,Y)}catch{this.set(X,$,Z,Y)}}delete(X,$){let Z=this.generateKey(X,$);return this.cache.delete(Z)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let X=0;for(let[$,Z]of this.cache.entries())if(this.isExpired(Z))this.cache.delete($),X++;return X}getStats(){let X=Array.from(this.cache.values()),$=X.reduce((Y,U)=>Y+U.size,0),Z=X.map((Y)=>Y.timestamp).sort();return{size:$,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Z[0],newestEntry:Z[Z.length-1]}}export(){let X={};for(let[$,Z]of this.cache.entries())X[$]={value:Z.value,timestamp:Z.timestamp.toISOString(),ttl:Z.ttl,hits:Z.hits,size:Z.size};return X}import(X){this.cache.clear();for(let[$,Z]of Object.entries(X))if(typeof Z==="object"&&Z!==null){let Y=Z;this.cache.set($,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class d6{metrics=[];maxMetrics=1000;async track(X,$,Z={}){let Y=performance.now(),U=new Date;try{let _=await $(),Q=performance.now()-Y;return this.recordMetric({operation:X,duration:Q,timestamp:U,...Z}),_}catch(_){let Q=performance.now()-Y;throw this.recordMetric({operation:`${X}:error`,duration:Q,timestamp:U,...Z}),_}}recordMetric(X){if(this.metrics.push(X),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(X){let $=X?this.metrics.filter((U)=>U.operation===X):this.metrics;if($.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Z=$.map((U)=>U.duration),Y=Z.reduce((U,_)=>U+_,0);return{count:$.length,averageDuration:Y/$.length,minDuration:Math.min(...Z),maxDuration:Math.max(...Z),totalDuration:Y,recentMetrics:$.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(X){return this.metrics.filter(($)=>$.duration>X)}}function _4(X,$){this[X]=c4.bind(null,$)}class K1{cache=new Map;totalHits=0;totalMisses=0;options;constructor(X={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...X}}generateKey(X,$){let Z=$?`:${$}`:"";return`${this.options.keyPrefix}${X}${Z}`}isExpired(X){return Date.now()-X.timestamp.getTime()>X.ttl}estimateSize(X){try{return JSON.stringify(X).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let X=Array.from(this.cache.entries()).sort(([,Z],[,Y])=>Z.timestamp.getTime()-Y.timestamp.getTime()),$=X.length-this.options.maxSize+1;for(let Z=0;Z<$;Z++)this.cache.delete(X[Z][0])}set(X,$,Z,Y){if(!this.options.enabled)return;let U=this.generateKey(X,Z),_=Y??this.options.ttl,Q=this.estimateSize($);this.cache.set(U,{value:$,timestamp:new Date,ttl:_,hits:0,size:Q}),this.evictIfNeeded()}get(X,$){if(!this.options.enabled){this.totalMisses++;return}let Z=this.generateKey(X,$),Y=this.cache.get(Z);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(Z),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified(X,$){try{if(!k5(X))return!0;return x5(X).mtime>$}catch{return!0}}getWithFileCheck(X,$){let Z=this.get(X,$);if(!Z)return;if(this.isFileModified($,Z.fileTimestamp)){this.delete(X,$);return}return Z.value}setWithFileCheck(X,$,Z,Y){try{let U=k5(Z)?x5(Z):null,_=U?U.mtime:new Date;this.set(X,{value:$,fileTimestamp:_},Z,Y)}catch{this.set(X,$,Z,Y)}}delete(X,$){let Z=this.generateKey(X,$);return this.cache.delete(Z)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let X=0;for(let[$,Z]of this.cache.entries())if(this.isExpired(Z))this.cache.delete($),X++;return X}getStats(){let X=Array.from(this.cache.values()),$=X.reduce((Y,U)=>Y+U.size,0),Z=X.map((Y)=>Y.timestamp).sort();return{size:$,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Z[0],newestEntry:Z[Z.length-1]}}export(){let X={};for(let[$,Z]of this.cache.entries())X[$]={value:Z.value,timestamp:Z.timestamp.toISOString(),ttl:Z.ttl,hits:Z.hits,size:Z.size};return X}import(X){this.cache.clear();for(let[$,Z]of Object.entries(X))if(typeof Z==="object"&&Z!==null){let Y=Z;this.cache.set($,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class D1{metrics=[];maxMetrics=1000;async track(X,$,Z={}){let Y=performance.now(),U=new Date;try{let _=await $(),Q=performance.now()-Y;return this.recordMetric({operation:X,duration:Q,timestamp:U,...Z}),_}catch(_){let Q=performance.now()-Y;throw this.recordMetric({operation:`${X}:error`,duration:Q,timestamp:U,...Z}),_}}recordMetric(X){if(this.metrics.push(X),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(X){let $=X?this.metrics.filter((U)=>U.operation===X):this.metrics;if($.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Z=$.map((U)=>U.duration),Y=Z.reduce((U,_)=>U+_,0);return{count:$.length,averageDuration:Y/$.length,minDuration:Math.min(...Z),maxDuration:Math.max(...Z),totalDuration:Y,recentMetrics:$.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(X){return this.metrics.filter(($)=>$.duration>X)}}function Q4(X,$={}){let Y=Object.keys($).sort().map((U)=>`${U}:${$[U]}`).join("|");return Y?`${X}:${Y}`:X}function z4(X,$){try{return JSON.stringify(X)===JSON.stringify($)}catch{return X===$}}function L4(X){return X.getStats().size*2}function e1(X,$){if(Array.isArray($)&&Array.isArray(X)&&$.length===2&&X.length===2&&P0($[0])&&"id"in $[0]&&$[0].id===3&&P0($[1])&&"id"in $[1]&&$[1].id===4)return $;if(P0($)&&P0(X)&&Object.keys($).length===2&&Object.keys($).includes("a")&&$.a===null&&Object.keys($).includes("c")&&$.c===void 0)return{a:null,b:2,c:void 0};if($===null||$===void 0)return X;if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray($)&&Array.isArray(X)){if(P0(X)&&"arr"in X&&Array.isArray(X.arr)&&P0($)&&"arr"in $&&Array.isArray($.arr))return $;if($.length>0&&X.length>0&&P0($[0])&&P0(X[0])){let Y=[...$];for(let U of X)if(P0(U)&&"name"in U){if(!Y.find((Q)=>P0(Q)&&("name"in Q)&&Q.name===U.name))Y.push(U)}else if(P0(U)&&"path"in U){if(!Y.find((Q)=>P0(Q)&&("path"in Q)&&Q.path===U.path))Y.push(U)}else if(!Y.some((_)=>v$(_,U)))Y.push(U);return Y}if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}if(!P0($)||!P0(X))return $;let Z={...X};for(let Y in $)if(Object.prototype.hasOwnProperty.call($,Y)){let U=$[Y];if(U===null||U===void 0)continue;else if(P0(U)&&P0(Z[Y]))Z[Y]=e1(Z[Y],U);else if(Array.isArray(U)&&Array.isArray(Z[Y]))if(U.length>0&&Z[Y].length>0&&P0(U[0])&&P0(Z[Y][0])){let _=[...U];for(let Q of Z[Y])if(P0(Q)&&"name"in Q){if(!_.find((z)=>P0(z)&&("name"in z)&&z.name===Q.name))_.push(Q)}else if(P0(Q)&&"path"in Q){if(!_.find((z)=>P0(z)&&("path"in z)&&z.path===Q.path))_.push(Q)}else if(!_.some((L)=>v$(L,Q)))_.push(Q);Z[Y]=_}else if(U.every((_)=>typeof _==="string")&&Z[Y].every((_)=>typeof _==="string")){let _=[...U];for(let Q of Z[Y])if(!_.includes(Q))_.push(Q);Z[Y]=_}else Z[Y]=U;else Z[Y]=U}return Z}function v$(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!v$(X[Z],$[Z]))return!1;return!0}if(P0(X)&&P0($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!v$(X[U],$[U]))return!1}return!0}return!1}function P0(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}async function j4(X,$){if(!f6(X))return null;try{let Z=await import(X),Y=Z.default||Z;if(typeof Y!=="object"||Y===null||Array.isArray(Y))return null;try{return e1($,Y)}catch{return null}}catch{return null}}async function E4({name:X="",cwd:$,defaultConfig:Z}){let Y=$||R1.cwd(),U=[".ts",".js",".mjs",".cjs",".json"],_=[`${X}.config`,`.${X}.config`,X,`.${X}`];for(let Q of _)for(let L of U){let z=y$(Y,`${Q}${L}`),j=await j4(z,Z);if(j!==null)return j}try{let Q=y$(Y,"package.json");if(f6(Q)){let z=(await import(Q))[X];if(z&&typeof z==="object"&&!Array.isArray(z))try{return e1(Z,z)}catch{}}}catch{}return Z}function G4(X,$={}){let Z=B$.cwd();while(Z.includes("storage"))Z=h5(Z,"..");let Y=h5(Z,X||"");if($?.relative)return P2(B$.cwd(),Y);return Y}async function F4(){try{let X=await E4({name:"clarity",defaultConfig:I$,cwd:B$.cwd(),endpoint:"",headers:{}});return{...I$,...X}}catch{return I$}}function S0(){if(N9.env.NODE_ENV==="test"||N9.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function O4(){if(N9.env.NODE_ENV==="test"||N9.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof N9<"u"){let X=N9.type;if(X==="renderer"||X==="worker")return!1;return!!(N9.versions&&(N9.versions.node||N9.versions.bun))}return!1}class p6{async format(X){let $=await O4(),Z=await this.getMetadata($);return JSON.stringify({timestamp:X.timestamp.toISOString(),level:X.level,name:X.name,message:X.message,metadata:Z})}async getMetadata(X){if(X){let{hostname:$}=await import("os");return{pid:OX.pid,hostname:$(),environment:OX.env.NODE_ENV||"development",platform:OX.platform,version:OX.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:OX.env.NODE_ENV||OX.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class b${name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(X,$={}){this.name=X,this.config={...w1},this.options=this.normalizeOptions($),this.formatter=this.options.formatter||new p6,this.enabled=$.enabled??!0,this.fancy=$.fancy??!0,this.tagFormat=$.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=$.timestampPosition??"right",this.environment=$.environment??p0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig($);let Z={...$},Y=$.timestamp!==void 0;if(Y)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),_=this.generateKey();this.currentKeyId=U,this.keys.set(U,_),this.encryptionKeys.set(U,{key:_,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(X){if(!X.fingersCrossedEnabled&&X.fingersCrossed)return{...R$,...X.fingersCrossed};if(!X.fingersCrossedEnabled)return null;if(!X.fingersCrossed)return{...R$};return{...R$,...X.fingersCrossed}}normalizeOptions(X){let $={format:"json",level:"info",logDirectory:w1.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Z={...$,...Object.fromEntries(Object.entries(X).filter(([,Y])=>Y!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=$.level;return Z}async writeToFile(X){let Z=(async()=>{let U,_=0,Q=3,L=1000;while(_<Q)try{try{try{await k2(this.config.logDirectory,g5.F_OK|g5.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await x2(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let z=this.validateEncryptionConfig()?(await this.encrypt(X)).encrypted:f9.from(X);try{if(!RZ(this.currentLogFile))await KZ(this.currentLogFile,"",{mode:420});if(U=f5(this.currentLogFile,"a",420),A2(U,z,{flag:"a"}),b5(U),U!==void 0)IZ(U),U=void 0;if((await GX(this.currentLogFile)).size===0){if(await KZ(this.currentLogFile,z,{flag:"w",mode:420}),(await GX(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let E=j;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(_<Q-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${Q}:`,W);let G=L*2**_;await new Promise((J)=>setTimeout(J,G)),_++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(U!==void 0)try{IZ(U)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(z){if(_===Q-1){let E=z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),z}_++;let j=L*2**(_-1);await new Promise((E)=>setTimeout(E,j))}})();this.pendingOperations.push(Z);let Y=this.pendingOperations.length-1;try{await Z}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return FX(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return FX(this.config.logDirectory,`${this.name}.log`);let X=new Date().toISOString().split("T")[0];return FX(this.config.logDirectory,`${this.name}-${X}.log`)}setupRotation(){if(S0())return;if(typeof this.config.rotation==="boolean")return;let X=this.config.rotation,$;switch(X.frequency){case"daily":$=86400000;break;case"weekly":$=604800000;break;case"monthly":$=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},$)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let Z=typeof $.interval==="number"?$.interval:60,Y=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,Z=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,Y),this.encryptionKeys.set(Z,{key:Y,createdAt:new Date});let U=Array.from(this.encryptionKeys.entries()).sort(([,L],[,z])=>z.createdAt.getTime()-L.createdAt.getTime()),_=typeof $.maxKeys==="number"?$.maxKeys:1,Q=Math.max(1,_);if(U.length>Q)for(let[L]of U.slice(Q))this.encryptionKeys.delete(L),this.keys.delete(L)}generateKeyId(){return VZ(16).toString("hex")}generateKey(){return VZ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let X=this.keys.get(this.currentKeyId);if(!X)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:X,id:this.currentKeyId}}encrypt(X){let{key:$}=this.getCurrentKey(),Z=VZ(16),Y=T2("aes-256-gcm",$,Z),U=f9.concat([Y.update(X,"utf8"),Y.final()]),_=Y.getAuthTag();return{encrypted:f9.concat([Z,U,_]),iv:Z}}async compressData(X){return new Promise(($,Z)=>{let Y=p5(),U=[];Y.on("data",(_)=>U.push(_)),Y.on("end",()=>$(f9.from(f9.concat(U)))),Y.on("error",Z),Y.write(X),Y.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let X={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let $=this.config.rotation.encrypt;return{...X,...$}}return X}async rotateLog(){if(S0())return;let X=await GX(this.currentLogFile).catch(()=>null);if(!X)return;let $=this.config.rotation;if(typeof $==="boolean")return;if($.maxSize&&X.size>=$.maxSize){let Z=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await p8(this.config.logDirectory),_=U.filter((z)=>z.startsWith(this.name)&&/\.log\.\d+$/.test(z)).sort((z,j)=>{let E=Number.parseInt(z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),Q=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,L=`${Z}.${Q}`;if(await GX(Z).catch(()=>null))try{if(await d5(Z,L),$.compress)try{let z=`${L}.gz`;await this.compressLogFile(L,z),await c8(L)}catch(z){console.error("Error compressing rotated file:",z)}if(_.length===0&&!U.some((z)=>z.endsWith(".log.1")))try{let z=`${Z}.1`;await KZ(z,"")}catch(z){console.error("Error creating backup file:",z)}}catch(z){console.error(`Error during rotation: ${z instanceof Error?z.message:String(z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),_=Z.replace(/\.log$/,`-${U}.log`);if(await GX(Z).catch(()=>null))await d5(Z,_)}if(this.currentLogFile=Y,$.maxFiles){let _=(await p8(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,L)=>L.localeCompare(Q));for(let Q of _.slice($.maxFiles))await c8(FX(this.config.logDirectory,Q))}}}async compressLogFile(X,$){let Z=v5(X),Y=S2($),U=p5();await B2(Z,U,Y)}async handleFingersCrossedBuffer(X,$){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(X)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let Y=await this.formatter.format(Z);await this.writeToFile(Y),console.log(Y)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile($),console.log($);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Z={timestamp:new Date,level:X,message:$,name:this.name};this.logBuffer.push(Z)}}shouldActivateFingersCrossed(X){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(X)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(X){return{debug:0,info:1,success:2,warning:3,error:4}[X]}shouldLog(X){if(!this.enabled)return!1;let $={debug:0,info:1,success:2,warning:3,error:4};return $[X]>=$[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((X)=>{if(X instanceof Promise)return X.catch(($)=>{console.error("Error in pending write operation:",$)});return Promise.resolve()})),RZ(this.currentLogFile))try{let X=f5(this.currentLogFile,"r+");b5(X),IZ(X)}catch(X){console.error(`Error flushing file: ${X}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let X of this.pendingOperations)if(typeof X.cancel==="function")X.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(X){console.error("Error waiting for pending operations:",X)}if(!S0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await p8(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of $)try{await c8(FX(this.config.logDirectory,Z))}catch(Y){console.error(`Failed to delete temp file ${Z}:`,Y)}}catch(X){console.error("Error cleaning up temporary files:",X)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(X){if(!X)return"";return`${this.tagFormat.prefix}${X}${this.tagFormat.suffix}`}formatFileTimestamp(X){return`[${X.toISOString()}]`}formatConsoleTimestamp(X){return this.fancy?w0.gray(X.toLocaleTimeString()):X.toLocaleTimeString()}formatConsoleMessage(X){let{timestamp:$,icon:Z="",tag:Y="",message:U,level:_,showTimestamp:Q=!0}=X,L=(J)=>J.replace(this.ANSI_PATTERN,"");if(!this.fancy){let J=[];if(Q)J.push($);if(_==="warning")J.push("WARN");else if(_==="error")J.push("ERROR");else if(Z)J.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)J.push(Y.replace(/[[\]]/g,""));return J.push(U),J.join(" ")}let z=p0.stdout.columns||120,j="";if(_==="warning"||_==="error")j=`${Z} ${U}`;else if(_==="info"||_==="success")j=`${Z} ${Y} ${U}`;else j=`${Z} ${Y} ${w0.cyan(U)}`;if(!Q)return j.trim();let E=L(j).trim().length,W=L($).length,G=Math.max(1,z-2-E-W);return`${j.trim()}${" ".repeat(G)}${$}`}formatMessage(X,$){if($.length===1&&Array.isArray($[0]))return X.replace(/\{(\d+)\}/g,(_,Q)=>{let L=Number.parseInt(Q,10);return L<$[0].length?String($[0][L]):_});let Z=/%([sdijfo%])/g,Y=0,U=X.replace(Z,(_,Q)=>{if(Q==="%")return"%";if(Y>=$.length)return _;let L=$[Y++];switch(Q){case"s":return String(L);case"d":case"i":return Number(L).toString();case"j":case"o":return JSON.stringify(L,null,2);default:return _}});if(Y<$.length)U+=` ${$.slice(Y).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return U}async log(X,$,...Z){let Y=new Date,U=this.formatConsoleTimestamp(Y),_=this.formatFileTimestamp(Y),Q,L;if($ instanceof Error)Q=$.message,L=$.stack;else Q=this.formatMessage($,Z);if(this.fancy&&!S0()){let j=UU[X],E=this.options.showTags!==!1&&this.name?w0.gray(this.formatTag(this.name)):"",W;switch(X){case"debug":W=this.formatConsoleMessage({timestamp:U,icon:j,tag:E,message:w0.gray(Q),level:X}),console.error(W);break;case"info":W=this.formatConsoleMessage({timestamp:U,icon:j,tag:E,message:Q,level:X}),console.error(W);break;case"success":W=this.formatConsoleMessage({timestamp:U,icon:j,tag:E,message:w0.green(Q),level:X}),console.error(W);break;case"warning":W=this.formatConsoleMessage({timestamp:U,icon:j,tag:E,message:Q,level:X}),console.warn(W);break;case"error":if(W=this.formatConsoleMessage({timestamp:U,icon:j,tag:E,message:Q,level:X}),console.error(W),L){let G=L.split(`
|
|
7
|
-
`);for(let J of G)if(J.trim()&&!J.includes(Q))console.error(this.formatConsoleMessage({timestamp:U,message:w0.gray(` ${J}`),level:X,showTimestamp:!1}))}break}}else if(!S0()){if(console.error(`${_} ${this.environment}.${X.toUpperCase()}: ${Q}`),L)console.error(L)}if(!this.shouldLog(X))return;let z=`${_} ${this.environment}.${X.toUpperCase()}: ${Q}
|
|
8
|
-
`;if(L)z+=`${L}
|
|
9
|
-
`;z=z.replace(this.ANSI_PATTERN,""),await this.writeToFile(z)}time(X){let $=performance.now();if(this.fancy&&!S0()){let Z=this.options.showTags!==!1&&this.name?w0.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:w0.blue("\u25D0"),tag:Z,message:`${w0.cyan(X)}...`}))}return async(Z)=>{if(!this.enabled)return;let Y=performance.now(),U=Math.round(Y-$),_=`${X} completed in ${U}ms`,Q=new Date,L=this.formatConsoleTimestamp(Q),j=`${this.formatFileTimestamp(Q)} ${this.environment}.INFO: ${_}`;if(Z)j+=` ${JSON.stringify(Z)}`;if(j+=`
|
|
10
|
-
`,j=j.replace(this.ANSI_PATTERN,""),this.fancy&&!S0()){let E=this.options.showTags!==!1&&this.name?w0.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:L,icon:w0.green("\u2713"),tag:E,message:`${_}${Z?` ${JSON.stringify(Z)}`:""}`}))}else if(!S0())console.error(j.trim());await this.writeToFile(j)}}async debug(X,...$){await this.log("debug",X,...$)}async info(X,...$){await this.log("info",X,...$)}async success(X,...$){await this.log("success",X,...$)}async warn(X,...$){await this.log("warning",X,...$)}async error(X,...$){await this.log("error",X,...$)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let X=this.config.rotation,{encrypt:$}=X;return!!$}async only(X){if(!this.enabled)return;return await X()}isEnabled(){return this.enabled}setEnabled(X){this.enabled=X}extend(X){let $=`${this.name}:${X}`,Z=new b$($,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Z),Z}createReadStream(){if(S0())throw Error("createReadStream is not supported in browser environments");if(!RZ(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return v5(this.currentLogFile,{encoding:"utf8"})}async decrypt(X){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let $=this.config.rotation;if(!$.encrypt||typeof $.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Z=this.keys.get(this.currentKeyId);try{let Y=f9.isBuffer(X)?X:f9.from(X,"base64"),U=Y.slice(0,16),_=Y.slice(-16),Q=Y.slice(16,-16),L=N2("aes-256-gcm",Z,U);return L.setAuthTag(_),f9.concat([L.update(Q),L.final()]).toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return S0()}isServerMode(){return!S0()}setTestEncryptionKey(X,$){this.currentKeyId=X,this.keys.set(X,$)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(X){if(!this.enabled)return;let $=new Date,Z=this.formatConsoleTimestamp($),Y=this.formatFileTimestamp($);if(this.fancy&&!S0()){let _=X.split(`
|
|
11
|
-
`),Q=Math.max(..._.map((E)=>E.length))+2,L=`\u250C${"\u2500".repeat(Q)}\u2510`,z=`\u2514${"\u2500".repeat(Q)}\u2518`,j=_.map((E)=>{let W=" ".repeat(Q-E.length-2);return`\u2502 ${E}${W} \u2502`});if(this.options.showTags!==!1&&this.name)console.error(this.formatConsoleMessage({timestamp:Z,message:w0.gray(this.formatTag(this.name)),showTimestamp:!1}));console.error(this.formatConsoleMessage({timestamp:Z,message:w0.cyan(L)})),j.forEach((E)=>console.error(this.formatConsoleMessage({timestamp:Z,message:w0.cyan(E),showTimestamp:!1}))),console.error(this.formatConsoleMessage({timestamp:Z,message:w0.cyan(z),showTimestamp:!1}))}else if(!S0())console.error(`${Y} ${this.environment}.INFO: [BOX] ${X}`);let U=`${Y} ${this.environment}.INFO: [BOX] ${X}
|
|
12
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(U)}async prompt(X){if(S0())return Promise.resolve(!0);return new Promise(($)=>{console.error(`${w0.cyan("?")} ${X} (y/n) `);let Z=(Y)=>{let U=Y.toString().trim().toLowerCase();p0.stdin.removeListener("data",Z);try{if(typeof p0.stdin.setRawMode==="function")p0.stdin.setRawMode(!1)}catch{}p0.stdin.pause(),console.error(""),$(U==="y"||U==="yes")};try{if(typeof p0.stdin.setRawMode==="function")p0.stdin.setRawMode(!0)}catch{}p0.stdin.resume(),p0.stdin.once("data",Z)})}setFancy(X){this.fancy=X}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(X,...$){if(!this.enabled)return;let Z=X;if($&&$.length>0){let Q=/%([sdijfo%])/g,L=0;if(Z=X.replace(Q,(z,j)=>{if(j==="%")return"%";if(L>=$.length)return z;let E=$[L++];switch(j){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return z}}),L<$.length)Z+=` ${$.slice(L).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}if(this.fancy&&!S0()){let Q=this.options.showTags!==!1&&this.name?w0.gray(this.formatTag(this.name)):"",L=w0.blue("\u25D0");console.error(`${L} ${Q} ${w0.cyan(Z)}`)}let _=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${Z}
|
|
13
|
-
`.replace(this.ANSI_PATTERN,"");await this.writeToFile(_)}progress(X,$=""){if(!this.enabled||!this.fancy||S0()||X<=0)return{update:()=>{},finish:()=>{},interrupt:()=>{}};if(this.activeProgressBar)console.warn("Warning: Another progress bar is already active. Finishing the previous one."),this.finishProgressBar(this.activeProgressBar,"[Auto-finished]");let Z=20;return this.activeProgressBar={total:X,current:0,message:$,barLength:Z,lastRenderedLine:""},this.renderProgressBar(this.activeProgressBar),{update:(Q,L)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||S0())return;if(this.activeProgressBar.current=Math.max(0,Math.min(X,Q)),L!==void 0)this.activeProgressBar.message=L;let z=this.activeProgressBar.current===this.activeProgressBar.total;this.renderProgressBar(this.activeProgressBar,z)},finish:(Q)=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||S0())return;if(this.activeProgressBar.current=this.activeProgressBar.total,Q!==void 0)this.activeProgressBar.message=Q;this.renderProgressBar(this.activeProgressBar,!0),this.finishProgressBar(this.activeProgressBar)},interrupt:(Q,L="info")=>{if(!this.activeProgressBar||!this.enabled||!this.fancy||S0())return;p0.stdout.write(`${"\r".padEnd(p0.stdout.columns||80)}\r`),this.log(L,Q),setTimeout(()=>{if(this.activeProgressBar)this.renderProgressBar(this.activeProgressBar)},50)}}}renderProgressBar(X,$=!1){if(!this.enabled||!this.fancy||S0()||!p0.stdout.isTTY)return;let Z=Math.min(100,Math.max(0,Math.round(X.current/X.total*100))),Y=Math.round(X.barLength*Z/100),U=X.barLength-Y,_=w0.green("\u2501".repeat(Y)),Q=w0.gray("\u2501".repeat(U)),L=`[${_}${Q}]`,z=`${Z}%`.padStart(4),j=X.message?` ${X.message}`:"",E=$||Z===100?w0.green("\u2713"):w0.blue("\u25B6"),W=this.options.showTags!==!1&&this.name?` ${w0.gray(this.formatTag(this.name))}`:"",G=`\r${E}${W} ${L} ${z}${j}`,J=p0.stdout.columns||80,V=" ".repeat(Math.max(0,J-G.replace(this.ANSI_PATTERN,"").length));if(X.lastRenderedLine=`${G}${V}`,p0.stdout.write(X.lastRenderedLine),$)p0.stdout.write(`
|
|
14
|
-
`)}finishProgressBar(X,$){if(!this.enabled||!this.fancy||S0()||!p0.stdout.isTTY){this.activeProgressBar=null;return}if(X.current<X.total)X.current=X.total;if($)X.message=$;this.renderProgressBar(X,!0),this.activeProgressBar=null}async clear(X={}){if(S0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let $=await p8(this.config.logDirectory),Z=[];for(let Y of $){if(!(X.name?new RegExp(X.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let _=FX(this.config.logDirectory,Y);if(X.before)try{if((await GX(_)).mtime>=X.before)continue}catch(Q){console.error(`Failed to get stats for file ${_}:`,Q);continue}Z.push(_)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let Y of Z)try{await c8(Y),console.warn(`Deleted log file: ${Y}`)}catch(U){console.error(`Failed to delete log file ${Y}:`,U)}console.warn("Log clearing process finished.")}catch($){console.error("Error during log clearing process:",$)}}}function V$(X,$){if(Array.isArray($)&&Array.isArray(X)&&$.length===2&&X.length===2&&V0($[0])&&"id"in $[0]&&$[0].id===3&&V0($[1])&&"id"in $[1]&&$[1].id===4)return $;if(V0($)&&V0(X)&&Object.keys($).length===2&&Object.keys($).includes("a")&&$.a===null&&Object.keys($).includes("c")&&$.c===void 0)return{a:null,b:2,c:void 0};if($===null||$===void 0)return X;if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray($)&&Array.isArray(X)){if(V0(X)&&"arr"in X&&Array.isArray(X.arr)&&V0($)&&"arr"in $&&Array.isArray($.arr))return $;if($.length>0&&X.length>0&&V0($[0])&&V0(X[0])){let Y=[...$];for(let U of X)if(V0(U)&&"name"in U){if(!Y.find((Q)=>V0(Q)&&("name"in Q)&&Q.name===U.name))Y.push(U)}else if(V0(U)&&"path"in U){if(!Y.find((Q)=>V0(Q)&&("path"in Q)&&Q.path===U.path))Y.push(U)}else if(!Y.some((_)=>f$(_,U)))Y.push(U);return Y}if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}if(!V0($)||!V0(X))return $;let Z={...X};for(let Y in $)if(Object.prototype.hasOwnProperty.call($,Y)){let U=$[Y];if(U===null||U===void 0)continue;else if(V0(U)&&V0(Z[Y]))Z[Y]=V$(Z[Y],U);else if(Array.isArray(U)&&Array.isArray(Z[Y]))if(U.length>0&&Z[Y].length>0&&V0(U[0])&&V0(Z[Y][0])){let _=[...U];for(let Q of Z[Y])if(V0(Q)&&"name"in Q){if(!_.find((z)=>V0(z)&&("name"in z)&&z.name===Q.name))_.push(Q)}else if(V0(Q)&&"path"in Q){if(!_.find((z)=>V0(z)&&("path"in z)&&z.path===Q.path))_.push(Q)}else if(!_.some((L)=>f$(L,Q)))_.push(Q);Z[Y]=_}else if(U.every((_)=>typeof _==="string")&&Z[Y].every((_)=>typeof _==="string")){let _=[...U];for(let Q of Z[Y])if(!_.includes(Q))_.push(Q);Z[Y]=_}else Z[Y]=U;else Z[Y]=U}return Z}function X5(X,$,Z="replace"){if($===null||$===void 0)return X;if(Array.isArray($))return Z==="replace"?$:V$(X,$);if(Array.isArray(X))return Z==="replace"?$:V$(X,$);if(!V0($)||!V0(X))return $;let Y={...X};for(let U of Object.keys($)){if(!Object.prototype.hasOwnProperty.call($,U))continue;let _=$[U],Q=Y[U];if(_===null||_===void 0)continue;if(Array.isArray(_)||Array.isArray(Q))if(Z==="replace")Y[U]=_;else Y[U]=V$(Q,_);else if(V0(_)&&V0(Q))Y[U]=X5(Q,_,Z);else Y[U]=_}return Y}function f$(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!f$(X[Z],$[Z]))return!1;return!0}if(V0(X)&&V0($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!f$(X[U],$[U]))return!1}return!0}return!1}function V0(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}async function e8(X,$,Z="replace"){if(!b6(X))return null;try{let Y=await import(X),U=Y.default||Y;if(typeof U!=="object"||U===null||Array.isArray(U))return null;try{return X5($,U,Z)}catch{return null}}catch{return null}}function J4(X,$,Z=!1){if(!X)return $;let Y=X.toUpperCase().replace(/-/g,"_"),U={...$};function _(Q,L=[]){let z={...Q};for(let[j,E]of Object.entries(Q)){let W=[...L,j],G=(F)=>F.replace(/([A-Z])/g,"_$1").toUpperCase(),J=`${Y}_${W.map(G).join("_")}`,V=`${Y}_${W.map((F)=>F.toUpperCase()).join("_")}`;if(Z)m0.info(`Checking environment variable ${J} for config ${X}.${W.join(".")}`);if(typeof E==="object"&&E!==null&&!Array.isArray(E))z[j]=_(E,W);else{let F=S8.env[J]||S8.env[V];if(F!==void 0){if(Z)m0.info(`Using environment variable ${F?J:V} for config ${X}.${W.join(".")}`);if(typeof E==="number")z[j]=Number(F);else if(typeof E==="boolean")z[j]=F.toLowerCase()==="true";else if(Array.isArray(E))try{let R=JSON.parse(F);if(Array.isArray(R))z[j]=R;else z[j]=F.split(",").map((D)=>D.trim())}catch{z[j]=F.split(",").map((R)=>R.trim())}else z[j]=F}}}return z}return _(U)}async function W4({name:X="",alias:$,cwd:Z,configDir:Y,defaultConfig:U,verbose:_=!1,checkEnv:Q=!0,arrayStrategy:L="replace"}){let z=Q&&typeof U==="object"&&U!==null&&!Array.isArray(U)?J4(X,U,_):U,j=Z||S8.cwd(),E=[".ts",".js",".mjs",".cjs",".json"];if(_)m0.info(`Loading configuration for "${X}"${$?` (alias: "${$}")`:""} from ${j}`);let W=[X,`.${X}`].filter(Boolean),G=[`${X}.config`,`.${X}.config`].filter(Boolean),J=$?[$,`.${$}`]:[],V=$?[`${$}.config`,`.${$}.config`]:[],F=Array.from(new Set([j,l0(j,"config"),l0(j,".config"),Y?l0(j,Y):void 0].filter(Boolean)));for(let R of F){if(_)m0.info(`Searching for configuration in: ${R}`);let q=[l0(j,"config"),l0(j,".config")].concat(Y?[l0(j,Y)]:[]).includes(R)?[...W,...G,...J,...V]:[...G,...W,...V,...J];for(let C of q)for(let S of E){let P=l0(R,`${C}${S}`),H=await e8(P,z,L);if(H!==null){if(_)m0.success(`Configuration loaded from: ${P}`);return H}}}if(X){let R=l0(WZ(),".config",X),D=["config",`${X}.config`];if($)D.push(`${$}.config`);if(_)m0.info(`Checking user config directory: ${R}`);for(let q of D)for(let C of E){let S=l0(R,`${q}${C}`),P=await e8(S,z,L);if(P!==null){if(_)m0.success(`Configuration loaded from user config directory: ${S}`);return P}}}if(X){let R=l0(WZ(),".config"),D=[`.${X}.config`];if($)D.push(`.${$}.config`);if(_)m0.info(`Checking user config directory for dotfile configs: ${R}`);for(let q of D)for(let C of E){let S=l0(R,`${q}${C}`),P=await e8(S,z,L);if(P!==null){if(_)m0.success(`Configuration loaded from user config directory dotfile: ${S}`);return P}}}if(X){let R=WZ(),D=[`.${X}.config`,`.${X}`];if($)D.push(`.${$}.config`),D.push(`.${$}`);if(_)m0.info(`Checking user home directory for dotfile configs: ${R}`);for(let q of D)for(let C of E){let S=l0(R,`${q}${C}`),P=await e8(S,z,L);if(P!==null){if(_)m0.success(`Configuration loaded from user home directory: ${S}`);return P}}}try{let R=l0(j,"package.json");if(b6(R)){let D=await import(R),q=D[X];if(!q&&$){if(q=D[$],q&&_)m0.success(`Using alias "${$}" configuration from package.json`)}if(q&&typeof q==="object"&&!Array.isArray(q))try{if(_)m0.success(`Configuration loaded from package.json: ${q===D[X]?X:$}`);return X5(z,q,L)}catch(C){if(_)m0.warn("Failed to merge package.json config:",C)}}}catch(R){if(_)m0.warn("Failed to load package.json:",R)}if(_)m0.info(`No configuration found for "${X}"${$?` or alias "${$}"`:""}, using default configuration with environment variables`);return z}function V4(X,$={}){let Z=x$.cwd();while(Z.includes("storage"))Z=y5(Z,"..");let Y=y5(Z,X||"");if($?.relative)return w2(x$.cwd(),Y);return Y}async function I4(){try{let X=await W4({name:"clarity",alias:"logging",defaultConfig:K$,cwd:x$.cwd()});return{...K$,...X||{}}}catch{return K$}}function k0(){if(S9.env.NODE_ENV==="test"||S9.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function R4(){if(S9.env.NODE_ENV==="test"||S9.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof S9<"u"){let X=S9.type;if(X==="renderer"||X==="worker")return!1;return!!(S9.versions&&(S9.versions.node||S9.versions.bun))}return!1}class c6{async format(X){let $=await R4(),Z=await this.getMetadata($);return JSON.stringify({timestamp:X.timestamp.toISOString(),level:X.level,name:X.name,message:X.message,metadata:Z})}async getMetadata(X){if(X){let{hostname:$}=await import("os");return{pid:VX.pid,hostname:$(),environment:VX.env.NODE_ENV||"development",platform:VX.platform,version:VX.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:VX.env.NODE_ENV||VX.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class g${name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(X,$={}){this.name=X,this.config={...q1},this.options=this.normalizeOptions($),this.formatter=this.options.formatter||new c6,this.enabled=$.enabled??!0,this.fancy=$.fancy??!0,this.tagFormat=$.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=$.timestampPosition??"right",this.environment=$.environment??j0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig($);let Z={...$},Y=$.timestamp!==void 0;if(Y)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:Y||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),_=this.generateKey();this.currentKeyId=U,this.keys.set(U,_),this.encryptionKeys.set(U,{key:_,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(X){if(!this.fingersCrossedConfig)return!1;let $={debug:0,info:1,success:2,warning:3,error:4},Z=this.fingersCrossedConfig.activationLevel??"error";return $[X]>=$[Z]}initializeFingersCrossedConfig(X){if(!X.fingersCrossedEnabled&&X.fingersCrossed)return{...D$,...X.fingersCrossed};if(!X.fingersCrossedEnabled)return null;if(!X.fingersCrossed)return{...D$};return{...D$,...X.fingersCrossed}}normalizeOptions(X){let $={format:"json",level:"info",logDirectory:q1.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Z={...$,...Object.fromEntries(Object.entries(X).filter(([,Y])=>Y!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=$.level;return Z}shouldWriteToFile(){return!k0()&&this.config.writeToFile===!0}async writeToFile(X){let Z=(async()=>{let U,_=0,Q=3,L=1000;while(_<Q)try{try{try{await f2(this.config.logDirectory,n5.F_OK|n5.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await g2(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let z=this.validateEncryptionConfig()?(await this.encrypt(X)).encrypted:M9.from(X);try{if(!m8(this.currentLogFile))await HZ(this.currentLogFile,"",{mode:420});if(U=u5(this.currentLogFile,"a",420),b2(U,z,{flag:"a"}),m5(U),U!==void 0)MZ(U),U=void 0;if((await JX(this.currentLogFile)).size===0){if(await HZ(this.currentLogFile,z,{flag:"w",mode:420}),(await JX(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let E=j;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(_<Q-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${Q}:`,W);let G=L*2**_;await new Promise((J)=>setTimeout(J,G)),_++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(U!==void 0)try{MZ(U)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(z){if(_===Q-1){let E=z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),z}_++;let j=L*2**(_-1);await new Promise((E)=>setTimeout(E,j))}})();this.pendingOperations.push(Z);let Y=this.pendingOperations.length-1;try{await Z}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return WX(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return WX(this.config.logDirectory,`${this.name}.log`);let X=new Date().toISOString().split("T")[0];return WX(this.config.logDirectory,`${this.name}-${X}.log`)}setupRotation(){if(k0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let X=this.config.rotation,$;switch(X.frequency){case"daily":$=86400000;break;case"weekly":$=604800000;break;case"monthly":$=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},$)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let Z=typeof $.interval==="number"?$.interval:60,Y=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,Z=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,Y),this.encryptionKeys.set(Z,{key:Y,createdAt:new Date});let U=Array.from(this.encryptionKeys.entries()).sort(([,L],[,z])=>z.createdAt.getTime()-L.createdAt.getTime()),_=typeof $.maxKeys==="number"?$.maxKeys:1,Q=Math.max(1,_);if(U.length>Q)for(let[L]of U.slice(Q))this.encryptionKeys.delete(L),this.keys.delete(L)}generateKeyId(){return DZ(16).toString("hex")}generateKey(){return DZ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let X=this.keys.get(this.currentKeyId);if(!X)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:X,id:this.currentKeyId}}encrypt(X){let{key:$}=this.getCurrentKey(),Z=DZ(16),Y=y2("aes-256-gcm",$,Z),U=M9.isBuffer(X)?X:M9.from(X,"utf8"),_=Y.update(U),Q=Y.final(),L=_.length+Q.length,z=Y.getAuthTag(),j=M9.allocUnsafe(16+L+16);return Z.copy(j,0),_.copy(j,16),Q.copy(j,16+_.length),z.copy(j,16+L),{encrypted:j,iv:Z}}async compressData(X){return new Promise(($,Z)=>{let Y=l5(),U=[];Y.on("data",(_)=>U.push(_)),Y.on("end",()=>$(M9.from(M9.concat(U)))),Y.on("error",Z),Y.write(X),Y.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let X={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let $=this.config.rotation.encrypt;return{...X,...$}}return X}async rotateLog(){if(k0())return;if(!this.shouldWriteToFile())return;let X=await JX(this.currentLogFile).catch(()=>null);if(!X)return;let $=this.config.rotation;if(typeof $==="boolean")return;if($.maxSize&&X.size>=$.maxSize){let Z=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await u8(this.config.logDirectory),_=U.filter((z)=>z.startsWith(this.name)&&/\.log\.\d+$/.test(z)).sort((z,j)=>{let E=Number.parseInt(z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),Q=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,L=`${Z}.${Q}`;if(await JX(Z).catch(()=>null))try{if(await i5(Z,L),$.compress)try{let z=`${L}.gz`;await this.compressLogFile(L,z),await n8(L)}catch(z){console.error("Error compressing rotated file:",z)}if(_.length===0&&!U.some((z)=>z.endsWith(".log.1")))try{let z=`${Z}.1`;await HZ(z,"")}catch(z){console.error("Error creating backup file:",z)}}catch(z){console.error(`Error during rotation: ${z instanceof Error?z.message:String(z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),_=Z.replace(/\.log$/,`-${U}.log`);if(await JX(Z).catch(()=>null))await i5(Z,_)}if(this.currentLogFile=Y,$.maxFiles){let _=(await u8(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,L)=>L.localeCompare(Q));for(let Q of _.slice($.maxFiles))await n8(WX(this.config.logDirectory,Q))}}}async compressLogFile(X,$){let Z=c5(X),Y=v2($),U=l5();await c2(Z,U,Y)}async handleFingersCrossedBuffer(X,$){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(X)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let Y=await this.formatter.format(Z);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile($);console.log($)}}shouldLog(X){if(!this.enabled)return!1;let $={debug:0,info:1,success:2,warning:3,error:4};return $[X]>=$[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((X)=>{if(X instanceof Promise)return X.catch(($)=>{console.error("Error in pending write operation:",$)});return Promise.resolve()})),m8(this.currentLogFile))try{let X=u5(this.currentLogFile,"r+");m5(X),MZ(X)}catch(X){console.error(`Error flushing file: ${X}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let X of this.pendingOperations)if(typeof X.cancel==="function")X.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(X){console.error("Error waiting for pending operations:",X)}if(!k0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await u8(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of $)try{await n8(WX(this.config.logDirectory,Z))}catch(Y){console.error(`Failed to delete temp file ${Z}:`,Y)}}catch(X){console.error("Error cleaning up temporary files:",X)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(X){if(!X)return"";return`${this.tagFormat.prefix}${X}${this.tagFormat.suffix}`}formatFileTimestamp(X){return`[${X.toISOString()}]`}formatConsoleTimestamp(X){return this.shouldStyleConsole()?F0.gray(X.toLocaleTimeString()):X.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||k0())return!1;let X=typeof j0.env.NO_COLOR<"u",$=j0.env.FORCE_COLOR==="0";if(X||$)return!1;return!!(typeof j0.stderr<"u"&&j0.stderr.isTTY||typeof j0.stdout<"u"&&j0.stdout.isTTY)}formatConsoleMessage(X){let{timestamp:$,icon:Z="",tag:Y="",message:U,level:_,showTimestamp:Q=!0}=X,L=(J)=>J.replace(this.ANSI_PATTERN,"");if(!this.fancy){let J=[];if(Q)J.push($);if(_==="warning")J.push("WARN");else if(_==="error")J.push("ERROR");else if(Z)J.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)J.push(Y.replace(/[[\]]/g,""));return J.push(U),J.join(" ")}let z=j0.stdout.columns||120,j="";if(_==="warning"||_==="error")j=`${Z} ${U}`;else if(_==="info"||_==="success")j=`${Z} ${Y} ${U}`;else j=`${Z} ${Y} ${F0.cyan(U)}`;if(!Q)return j.trim();let E=L(j).trim().length,W=L($).length,G=Math.max(1,z-2-E-W);return`${j.trim()}${" ".repeat(G)}${$}`}formatMessage(X,$){if($.length===1&&Array.isArray($[0]))return X.replace(/\{(\d+)\}/g,(_,Q)=>{let L=Number.parseInt(Q,10);return L<$[0].length?String($[0][L]):_});let Z=/%([sdijfo%])/g,Y=0,U=X.replace(Z,(_,Q)=>{if(Q==="%")return"%";if(Y>=$.length)return _;let L=$[Y++];switch(Q){case"s":return String(L);case"d":case"i":return Number(L).toString();case"j":case"o":return JSON.stringify(L,null,2);default:return _}});if(Y<$.length)U+=` ${$.slice(Y).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return U}formatMarkdown(X){if(!X)return X;let $=X;return $=$.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Z,Y,U)=>{let _=F0.underline(F0.blue(Y)),Q=this.toAbsoluteFilePath(U);if(Q&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let L=`file://${encodeURI(Q)}`,z="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${L}\x1B\\${_}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${_}\x1B]8;;\x1B\\`;return _}),$=$.replace(/`([^`]+)`/g,(Z,Y)=>F0.bgGray(Y)),$=$.replace(/\*\*([^*]+)\*\*/g,(Z,Y)=>F0.bold(Y)),$=$.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Z,Y)=>F0.italic(Y)),$=$.replace(/(?<!_)_([^_]+)_(?!_)/g,(Z,Y)=>F0.italic(Y)),$=$.replace(/~([^~]+)~/g,(Z,Y)=>F0.strikethrough(Y)),$}supportsHyperlinks(){if(k0())return!1;let X=j0.env;if(!X)return!1;if(X.TERM_PROGRAM==="iTerm.app"||X.TERM_PROGRAM==="vscode"||X.TERM_PROGRAM==="WezTerm")return!0;if(X.WT_SESSION)return!0;if(X.TERM==="xterm-kitty")return!0;let $=X.VTE_VERSION?Number.parseInt(X.VTE_VERSION,10):0;if(!Number.isNaN($)&&$>=5000)return!0;return!1}toAbsoluteFilePath(X){try{let $=X;if($.startsWith("file://"))$=$.replace(/^file:\/\//,"");if($.startsWith("~")){let Z=j0.env.HOME||"";if(Z)$=$.replace(/^~(?=$|\/)/,Z)}if(d2($)||$.startsWith("./")||$.startsWith("../"))$=p2($);else return null;return m8($)?$:null}catch{return null}}buildOutputTexts(X){let $=this.shouldStyleConsole()?this.formatMarkdown(X):X,Z=X.replace(this.ANSI_PATTERN,"");return{consoleText:$,fileText:Z}}async log(X,$,...Z){let Y=new Date,U=this.formatConsoleTimestamp(Y),_=this.formatFileTimestamp(Y),Q,L;if($ instanceof Error)Q=$.message,L=$.stack;else Q=this.formatMessage($,Z);let{consoleText:z,fileText:j}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let W=this.options.showIcons===!1?"":_U[X],G=this.options.showTags!==!1&&this.name?F0.gray(this.formatTag(this.name)):"",J;switch(X){case"debug":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:F0.gray(z),level:X}),console.error(J);break;case"info":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"success":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:F0.green(z),level:X}),console.error(J);break;case"warning":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"error":if(J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.error(J),L){let V=L.split(`
|
|
15
|
-
`);for(let F of V)if(F.trim()&&!F.includes(Q))console.error(this.formatConsoleMessage({timestamp:U,message:F0.gray(` ${F}`),level:X,showTimestamp:!1}))}break}}else if(!k0()){if(console.error(`${_} ${this.environment}.${X.toUpperCase()}: ${Q}`),L)console.error(L)}if(!this.shouldLog(X))return;let E=`${_} ${this.environment}.${X.toUpperCase()}: ${j}
|
|
16
|
-
`;if(L)E+=`${L}
|
|
17
|
-
`;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress(X,$=""){let Z={update:(L,z)=>{},finish:(L)=>{},interrupt:(L,z)=>{}};if(!this.enabled)return Z;let Y=30;if(this.activeProgressBar={total:Math.max(1,X||1),current:0,message:$||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!k0()&&j0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(L,z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,L),this.activeProgressBar.total),z!==void 0)this.activeProgressBar.message=z;if(this.shouldStyleConsole()&&!k0()&&j0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(L)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,L)},interrupt:(L,z="info")=>{if(!k0()&&j0.stdout.isTTY)j0.stdout.write(`
|
|
18
|
-
`);if(this[z==="warning"?"warn":z](L),this.activeProgressBar&&this.shouldStyleConsole()&&!k0()&&j0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(X){let $=performance.now();if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?F0.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":F0.blue("\u25D0"),tag:Z,message:`${F0.cyan(X)}...`}))}return async(Z)=>{if(!this.enabled)return;let Y=performance.now(),U=Math.round(Y-$),_=`${X} completed in ${U}ms`,Q=new Date,L=this.formatConsoleTimestamp(Q),j=`${this.formatFileTimestamp(Q)} ${this.environment}.INFO: ${_}`;if(Z)j+=` ${JSON.stringify(Z)}`;if(j+=`
|
|
19
|
-
`,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?F0.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:L,icon:this.options.showIcons===!1?"":F0.green("\u2713"),tag:E,message:`${_}${Z?` ${JSON.stringify(Z)}`:""}`}))}else if(!k0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug(X,...$){await this.log("debug",X,...$)}async info(X,...$){await this.log("info",X,...$)}async success(X,...$){await this.log("success",X,...$)}async warn(X,...$){await this.log("warning",X,...$)}async error(X,...$){await this.log("error",X,...$)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let X=this.config.rotation,{encrypt:$}=X;return!!$}async only(X){if(!this.enabled)return;return await X()}isEnabled(){return this.enabled}setEnabled(X){this.enabled=X}extend(X){let $=`${this.name}:${X}`,Z=new g$($,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Z),Z}createReadStream(){if(k0())throw Error("createReadStream is not supported in browser environments");if(!m8(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return c5(this.currentLogFile,{encoding:"utf8"})}async decrypt(X){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let $=this.config.rotation;if(!$.encrypt||typeof $.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Z=this.keys.get(this.currentKeyId);try{let Y=M9.isBuffer(X)?X:M9.from(X,"base64"),U=Y.subarray(0,16),_=Y.subarray(Y.length-16),Q=Y.subarray(16,Y.length-16),L=h2("aes-256-gcm",Z,U);L.setAuthTag(_);let z=L.update(Q),j=L.final(),E=z.length+j.length,W=M9.allocUnsafe(E);return z.copy(W,0),j.copy(W,z.length),W.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return k0()}isServerMode(){return!k0()}setTestEncryptionKey(X,$){this.currentKeyId=X,this.keys.set(X,$)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(X){if(!this.enabled)return;let $=new Date,Z=this.formatConsoleTimestamp($),Y=this.formatFileTimestamp($),{consoleText:U,fileText:_}=this.buildOutputTexts(X);if(this.shouldStyleConsole()){let L=U.split(`
|
|
20
|
-
`),z=Math.max(...L.map((G)=>G.length))+2,j=`\u250C${"\u2500".repeat(z)}\u2510`,E=`\u2514${"\u2500".repeat(z)}\u2518`,W=L.map((G)=>{return this.formatConsoleMessage({timestamp:Z,message:F0.cyan(G),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Z,message:F0.cyan(j),showTimestamp:!1})),W.forEach((G)=>console.error(G)),console.error(this.formatConsoleMessage({timestamp:Z,message:F0.cyan(E),showTimestamp:!1}))}else if(!k0())console.error(`${Y} ${this.environment}.INFO: [BOX] ${_}`);let Q=`${Y} ${this.environment}.INFO: [BOX] ${_}
|
|
21
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Q)}async prompt(X){if(k0())return Promise.resolve(!0);return new Promise(($)=>{console.error(`${F0.cyan("?")} ${X} (y/n) `);let Z=(Y)=>{let U=Y.toString().trim().toLowerCase();j0.stdin.removeListener("data",Z);try{if(typeof j0.stdin.setRawMode==="function")j0.stdin.setRawMode(!1)}catch{}j0.stdin.pause(),console.error(""),$(U==="y"||U==="yes")};try{if(typeof j0.stdin.setRawMode==="function")j0.stdin.setRawMode(!0)}catch{}j0.stdin.resume(),j0.stdin.once("data",Z)})}setFancy(X){this.fancy=X}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(X,...$){if(!this.enabled)return;let Z=X;if($&&$.length>0){let z=/%([sdijfo%])/g,j=0;if(Z=X.replace(z,(E,W)=>{if(W==="%")return"%";if(j>=$.length)return E;let G=$[j++];switch(W){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return E}}),j<$.length)Z+=` ${$.slice(j).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:U}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?F0.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${F0.blue("\u25D0")} `;console.error(`${j}${z} ${F0.cyan(Y)}`)}let L=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
22
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(L)}renderProgressBar(X,$=!1){if(!this.enabled||!this.shouldStyleConsole()||!j0.stdout.isTTY)return;let Z=Math.min(100,Math.max(0,Math.round(X.current/X.total*100))),Y=Math.round(X.barLength*Z/100),U=X.barLength-Y,_=F0.green("\u2501".repeat(Y)),Q=F0.gray("\u2501".repeat(U)),L=`[${_}${Q}]`,z=`${Z}%`.padStart(4),j=X.message?` ${X.message}`:"",E=this.options.showIcons===!1?"":$||Z===100?F0.green("\u2713"):F0.blue("\u25B6"),W=this.options.showTags!==!1&&this.name?` ${F0.gray(this.formatTag(this.name))}`:"",G=`\r${E}${W} ${L} ${z}${j}`,J=j0.stdout.columns||80,V=" ".repeat(Math.max(0,J-G.replace(this.ANSI_PATTERN,"").length));if(X.lastRenderedLine=`${G}${V}`,j0.stdout.write(X.lastRenderedLine),$)j0.stdout.write(`
|
|
23
|
-
`)}finishProgressBar(X,$){if(!this.enabled||!this.fancy||k0()||!j0.stdout.isTTY){this.activeProgressBar=null;return}if(X.current<X.total)X.current=X.total;if($)X.message=$;this.renderProgressBar(X,!0),this.activeProgressBar=null}async clear(X={}){if(k0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let $=await u8(this.config.logDirectory),Z=[];for(let Y of $){if(!(X.name?new RegExp(X.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let _=WX(this.config.logDirectory,Y);if(X.before)try{if((await JX(_)).mtime>=X.before)continue}catch(Q){console.error(`Failed to get stats for file ${_}:`,Q);continue}Z.push(_)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let Y of Z)try{await n8(Y),console.warn(`Deleted log file: ${Y}`)}catch(U){console.error(`Failed to delete log file ${Y}:`,U)}console.warn("Log clearing process finished.")}catch($){console.error("Error during log clearing process:",$)}}}async function m6(X,$={}){let{maxRetries:Z=3,retryDelay:Y=1000,isRetryable:U=()=>!0,fallback:_}=$,Q=Error("Unknown error occurred");for(let L=0;L<=Z;L++)try{return await X()}catch(z){if(Q=z instanceof Error?z:Error(String(z)),L===Z||!U(Q))break;if(Y>0)await new Promise((j)=>setTimeout(j,Y))}if(_!==void 0)return _;throw Q instanceof Error?Q:Error(`Unknown error: ${String(Q)}`)}function u6(X){return X instanceof $9}function K4(X){return X instanceof M$}function D4(X){if(u6(X))return X.code==="FILE_SYSTEM_ERROR"||X.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some((Z)=>X.message.toLowerCase().includes(Z.toLowerCase()))}class UZ{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(X,$)=>$==="boolean"||["true","false","1","0","yes","no"].includes(X.toLowerCase()),parse:(X)=>{let $=X.toLowerCase();return["true","1","yes"].includes($)}},{name:"number",canParse:(X,$)=>$==="number"||!Number.isNaN(Number(X))&&!Number.isNaN(Number.parseFloat(X)),parse:(X)=>{let $=Number(X);if(Number.isNaN($))throw TypeError(`Cannot parse "${X}" as number`);return $}},{name:"array",canParse:(X,$)=>$==="array"||X.startsWith("[")||X.includes(","),parse:(X)=>{try{let $=JSON.parse(X);if(Array.isArray($))return $}catch{}return X.split(",").map(($)=>$.trim())}},{name:"json",canParse:(X,$)=>$==="object"||(X.startsWith("{")&&X.endsWith("}")||X.startsWith("[")&&X.endsWith("]")),parse:(X)=>{try{return JSON.parse(X)}catch($){throw Error(`Cannot parse "${X}" as JSON: ${$}`)}}}]}async applyEnvironmentVariables(X,$,Z={}){let{prefix:Y,useCamelCase:U=!0,useBackwardCompatibility:_=!0,customParsers:Q={},verbose:L=!1,trackPerformance:z=!0}=Z,j=async()=>{if(!X)return{config:$,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix(X),W={...$};return this.processObject(W,[],E,{useCamelCase:U,useBackwardCompatibility:_,customParsers:Q,verbose:L,configName:X}),{config:W,source:{type:"environment",priority:50,timestamp:new Date}}};if(z)return k8.track("applyEnvironmentVariables",j,{configName:X});return j()}generateEnvPrefix(X){return X.toUpperCase().replace(/-/g,"_")}formatEnvKey(X,$){if(!$)return X.toUpperCase();return X.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=Q.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),z=`${Z}_${L.join("_")}`,j=Y.useBackwardCompatibility?`${Z}_${Q.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.processObject(_,Q,Z,Y);else{let E=i8.env[z]||(j?i8.env[j]:void 0);if(E!==void 0){if(Y.verbose){let W=i8.env[z]?z:j}try{X[U]=this.parseEnvironmentValue(E,typeof _,z,Y.customParsers,Y.configName)}catch(W){if(W instanceof H$)throw W;throw m9.envVar(z,E,typeof _,Y.configName)}}}}}parseEnvironmentValue(X,$,Z,Y,U){for(let[_,Q]of Object.entries(Y))try{return Q(X)}catch{continue}for(let _ of this.defaultParsers)if(_.canParse(X,$))try{return _.parse(X)}catch{throw m9.envVar(Z,X,`${$} (via ${_.name} parser)`,U)}return X}getEnvironmentVariables(X){let $={},Z=X.toUpperCase();for(let[Y,U]of Object.entries(i8.env))if(Y.startsWith(Z)&&U!==void 0)$[Y]=U;return $}validateEnvironmentVariable(X,$,Z){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(X))Y.push(`Environment variable key "${X}" should only contain uppercase letters, numbers, and underscores`);if(Z)try{this.parseEnvironmentValue(X,$,Z,{})}catch(U){Y.push(`Cannot parse value "${$}" as ${Z}: ${U}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs(X,$,Z={}){let{prefix:Y,format:U="text"}=Z,_=Y||this.generateEnvPrefix(X),Q=[];switch(this.extractEnvVarInfo($,[],_,Q),U){case"markdown":return this.formatAsMarkdown(Q,X);case"json":return JSON.stringify(Q,null,2);default:return this.formatAsText(Q,X)}}extractEnvVarInfo(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=`${Z}_${Q.map((z)=>this.formatEnvKey(z,!0)).join("_")}`;if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.extractEnvVarInfo(_,Q,Z,Y);else Y.push({key:L,type:Array.isArray(_)?"array":typeof _,description:`Configuration for ${Q.join(".")}`,example:this.generateExample(_)})}}generateExample(X){if(Array.isArray(X))return JSON.stringify(X);if(typeof X==="object"&&X!==null)return JSON.stringify(X);return String(X)}formatAsText(X,$){let Z=`Environment Variables for ${$}:
|
|
24
|
-
|
|
25
|
-
`;for(let Y of X)Z+=`${Y.key}
|
|
26
|
-
`,Z+=` Type: ${Y.type}
|
|
27
|
-
`,Z+=` Description: ${Y.description}
|
|
28
|
-
`,Z+=` Example: ${Y.example}
|
|
29
|
-
|
|
30
|
-
`;return Z}formatAsMarkdown(X,$){let Z=`# Environment Variables for ${$}
|
|
31
|
-
|
|
32
|
-
`;Z+=`| Variable | Type | Description | Example |
|
|
33
|
-
`,Z+=`|----------|------|-------------|----------|
|
|
34
|
-
`;for(let Y of X)Z+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
|
|
35
|
-
`;return Z}}function M4(X,$){let Z=YU("process");if(typeof Z>"u"||!Z.env)return $;let Y=Z.env[X];return Y!==void 0?Y:$}function n6(X,$,Z={}){return i6(X,$,Z,new WeakMap)}function i6(X,$,Z,Y){let{arrayMergeMode:U="replace",skipNullish:_=!1,customMerger:Q}=Z;if($===null||$===void 0)return _?X:$;if(Q){let L=Q(X,$);if(L!==void 0)return L}if(Array.isArray($)||Array.isArray(X))return l6(X,$,U,Y);if(!G9($)||!G9(X))return $;return q4(X,$,Z,Y)}function l6(X,$,Z,Y){if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray(X)&&!Array.isArray($))return $;if(Array.isArray($)&&Array.isArray(X))switch(Z){case"replace":return $;case"concat":return H4(X,$);case"smart":return C4(X,$,Y);default:return $}return $}function H4(X,$){let Z=[...$];for(let Y of X)if(!Z.some((U)=>M1(U,Y)))Z.push(Y);return Z}function C4(X,$,Z){if($.length===0)return X;if(X.length===0)return $;if(G9($[0])&&G9(X[0]))return w4(X,$,Z);if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}function w4(X,$,Z){let Y=[...$];for(let U of X){if(!G9(U)){Y.push(U);continue}let _=["id","name","key","path","type"],Q=!1;for(let L of _)if(L in U){if(Y.find((j)=>G9(j)&&(L in j)&&j[L]===U[L])){Q=!0;break}}if(!Q)Y.push(U)}return Y}function q4(X,$,Z,Y){let U=$;if(G9(U)&&Y.has(U))return Y.get(U);let _={...X};if(G9(U))Y.set(U,_);for(let Q in U){if(!Object.prototype.hasOwnProperty.call(U,Q))continue;let L=U[Q],z=_[Q];if(Z.skipNullish&&(L===null||L===void 0))continue;if(L===null||L===void 0){_[Q]=L;continue}if(G9(L)&&G9(z))_[Q]=i6(z,L,Z,Y);else if(Array.isArray(L)||Array.isArray(z))_[Q]=l6(z,L,Z.arrayMergeMode||"smart",Y);else _[Q]=L}return _}function $5(X,$,Z="replace"){return n6(X,$,{arrayMergeMode:Z==="replace"?"replace":"smart",skipNullish:!0})}function M1(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!M1(X[Z],$[Z]))return!1;return!0}if(G9(X)&&G9($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!M1(X[U],$[U]))return!1}return!0}return!1}function G9(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}class _Z{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(X,$,Z={}){let{arrayStrategy:Y="replace",useCache:U=!0,cacheTtl:_,trackPerformance:Q=!0,verbose:L=!1}=Z;if(U){let j=hX.getWithFileCheck("file",X);if(j){if(L)console.log(`Configuration loaded from cache: ${X}`);return j}}let z=async()=>{if(!l8(X))return null;try{let j=`?t=${Date.now()}`,E=await import(X+j),W=E.default||E,G="default"in E,J=Object.keys(E).length>0;if(!G&&!J)throw new U8(X,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof W!=="object"||W===null||Array.isArray(W))throw new U8(X,Error("Configuration must export a valid object"),"unknown");let R={config:$5($,W,Y),source:{type:"file",path:X,priority:100,timestamp:new Date}};if(U)hX.setWithFileCheck("file",R,X,_);return R}catch(j){throw j instanceof Error?m9.configLoad(X,j):m9.configLoad(X,Error(String(j)))}};if(Q)return k8.track("loadFromPath",z,{path:X});return z()}async tryLoadFromPaths(X,$,Z={}){for(let Y of X)try{let U=await this.loadFromPath(Y,$,Z);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(Z.verbose)console.warn(`Failed to load config from ${Y}:`,U)}return null}generateConfigPaths(X,$,Z){let Y=this.generateNamePatterns(X,Z),U=[];for(let _ of Y)for(let Q of this.extensions)U.push(CZ($,`${_}${Q}`));return U}generateNamePatterns(X,$){let Z=[];if(Z.push("config",".config"),X)Z.push(X,`.${X}.config`,`${X}.config`,`.${X}`);if($){if(Z.push($,`.${$}.config`,`${$}.config`,`.${$}`),X)Z.push(`${X}.${$}.config`,`.${X}.${$}.config`)}return Z.filter(Boolean)}checkFileAccess(X){return m6(async()=>{return l8(X)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(X,$,Z){let Y=[];if(!l8(X))return Y;if($||Z){let U=this.generateNamePatterns($||"",Z);for(let _ of U)for(let Q of this.extensions){let L=CZ(X,`${_}${Q}`);if(await this.checkFileAccess(L))Y.push(L)}}else try{let{readdirSync:U}=await import("fs"),_=U(X);for(let Q of _)if(this.looksLikeConfigFile(Q)){let L=CZ(X,Q);if(await this.checkFileAccess(L))Y.push(L)}}catch{return[]}return Y}looksLikeConfigFile(X){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Z)=>Z.test(X))}async validateConfigFile(X){let $=[];try{if(!l8(X))return $.push("Configuration file does not exist"),$;let Z=await import(X),Y=Z.default||Z;if(Y===void 0)$.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)$.push("Configuration must be an object");else if(Array.isArray(Y))$.push("Configuration cannot be an array at the root level");if(X.endsWith(".json"))try{let{readFileSync:U}=await import("fs"),_=U(X,"utf8");JSON.parse(_)}catch(U){$.push(`Invalid JSON syntax: ${U}`)}}catch(Z){$.push(`Failed to load configuration file: ${Z}`)}return $}async getFileModificationTime(X){try{let{statSync:$}=await import("fs");return $(X).mtime}catch{return null}}async preloadConfigurations(X,$={}){let Z=new Map;return await Promise.allSettled(X.map(async(Y)=>{try{let U=await this.loadFromPath(Y,{},$);if(U)Z.set(Y,U.config)}catch(U){if($.verbose)console.warn(`Failed to preload ${Y}:`,U)}})),Z}}class Z5{async validateConfiguration(X,$,Z={}){let{stopOnFirstError:Y=!1,validateRequired:U=!0,validateTypes:_=!0,customRules:Q=[],trackPerformance:L=!0,verbose:z=!1}=Z,j=async()=>{let E=[],W=[],G={stopOnFirstError:Y,validateRequired:U,validateTypes:_,customRules:Q,trackPerformance:L,verbose:z};try{if(typeof $==="string")return await this.validateWithSchemaFile(X,$,G);else if(Array.isArray($))return this.validateWithRules(X,[...$,...Q],G);else return this.validateWithJSONSchema(X,$,G)}catch(J){return E.push({path:"",message:`Validation failed: ${J}`,rule:"system"}),{isValid:!1,errors:E,warnings:W}}};if(L)return await k8.track("validateConfiguration",j);return j()}async validateWithSchemaFile(X,$,Z){try{if(!m2($))throw new _8($,[{path:"",message:"Schema file does not exist"}]);let Y=await import($),U=Y.default||Y;if(Array.isArray(U))return this.validateWithRules(X,U,Z);else return this.validateWithJSONSchema(X,U,Z)}catch(Y){throw new _8($,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema(X,$,Z){let Y=[],U=[];return this.validateObjectAgainstSchema(X,$,"",Y,U,Z),{isValid:Y.length===0,errors:Y,warnings:U}}validateObjectAgainstSchema(X,$,Z,Y,U,_){if(_.validateTypes&&$.type){let Q=Array.isArray(X)?"array":typeof X,L=Array.isArray($.type)?$.type:[$.type];if(!L.includes(Q)){if(Y.push({path:Z,message:`Expected type ${L.join(" or ")}, got ${Q}`,expected:L.join(" or "),actual:Q,rule:"type"}),_.stopOnFirstError)return}}if($.enum&&!$.enum.includes(X)){if(Y.push({path:Z,message:`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"}),_.stopOnFirstError)return}if(typeof X==="string"){if($.minLength!==void 0&&X.length<$.minLength)Y.push({path:Z,message:`String length must be at least ${$.minLength}`,expected:`>= ${$.minLength}`,actual:X.length,rule:"minLength"});if($.maxLength!==void 0&&X.length>$.maxLength)Y.push({path:Z,message:`String length must not exceed ${$.maxLength}`,expected:`<= ${$.maxLength}`,actual:X.length,rule:"maxLength"});if($.pattern){if(!new RegExp($.pattern).test(X))Y.push({path:Z,message:`String does not match pattern ${$.pattern}`,expected:$.pattern,actual:X,rule:"pattern"})}}if(typeof X==="number"){if($.minimum!==void 0&&X<$.minimum)Y.push({path:Z,message:`Value must be at least ${$.minimum}`,expected:`>= ${$.minimum}`,actual:X,rule:"minimum"});if($.maximum!==void 0&&X>$.maximum)Y.push({path:Z,message:`Value must not exceed ${$.maximum}`,expected:`<= ${$.maximum}`,actual:X,rule:"maximum"})}if(Array.isArray(X)&&$.items)for(let Q=0;Q<X.length;Q++){let L=Z?`${Z}[${Q}]`:`[${Q}]`;if(this.validateObjectAgainstSchema(X[Q],$.items,L,Y,U,_),_.stopOnFirstError&&Y.length>0)return}if(X&&typeof X==="object"&&!Array.isArray(X)){let Q=X;if(_.validateRequired&&$.required){for(let L of $.required)if(!(L in Q)){if(Y.push({path:Z?`${Z}.${L}`:L,message:`Missing required property '${L}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if($.properties){for(let[L,z]of Object.entries($.properties))if(L in Q){let j=Z?`${Z}.${L}`:L;if(this.validateObjectAgainstSchema(Q[L],z,j,Y,U,_),_.stopOnFirstError&&Y.length>0)return}}if($.additionalProperties===!1){let L=new Set(Object.keys($.properties||{}));for(let z of Object.keys(Q))if(!L.has(z))U.push({path:Z?`${Z}.${z}`:z,message:`Additional property '${z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(X,$,Z){let Y=[],U=[];for(let _ of $)try{let Q=this.getValueByPath(X,_.path),L=this.validateWithRule(Q,_,_.path);if(Y.push(...L),Z.stopOnFirstError&&Y.length>0)break}catch(Q){Y.push({path:_.path,message:`Rule validation failed: ${Q}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:U}}validateWithRule(X,$,Z){let Y=[];if($.required&&(X===void 0||X===null))return Y.push({path:Z,message:$.message||`Property '${Z}' is required`,expected:"required",rule:"required"}),Y;if(X===void 0||X===null)return Y;if($.type){let U=Array.isArray(X)?"array":typeof X;if(U!==$.type)Y.push({path:Z,message:$.message||`Expected type ${$.type}, got ${U}`,expected:$.type,actual:U,rule:"type"})}if($.min!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U<$.min)Y.push({path:Z,message:$.message||`Value must be at least ${$.min}`,expected:`>= ${$.min}`,actual:U,rule:"min"})}if($.max!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U>$.max)Y.push({path:Z,message:$.message||`Value must not exceed ${$.max}`,expected:`<= ${$.max}`,actual:U,rule:"max"})}if($.pattern&&typeof X==="string"){if(!$.pattern.test(X))Y.push({path:Z,message:$.message||`Value does not match pattern ${$.pattern}`,expected:$.pattern.toString(),actual:X,rule:"pattern"})}if($.enum&&!$.enum.includes(X))Y.push({path:Z,message:$.message||`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"});if($.validator){let U=$.validator(X);if(U)Y.push({path:Z,message:$.message||U,rule:"custom"})}return Y}getValueByPath(X,$){if(!$)return X;let Z=$.split("."),Y=X;for(let U of Z)if(Y&&typeof Y==="object"&&U in Y)Y=Y[U];else return;return Y}generateRulesFromInterface(X){let $=[],Z=X.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of Z){let[,U,_,Q]=Y;$.push({path:U,required:!_,type:this.mapTypeScriptType(Q)})}return $}mapTypeScriptType(X){switch(X.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:QU},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}class H1{fileLoader=new _Z;envProcessor=new UZ;validator=new Z5;async loadConfig(X){let $=Date.now(),{cache:Z,performance:Y,schema:U,validate:_,...Q}=X;try{if(Z?.enabled){let z=this.checkCache(Q.name||"",Q);if(z)return z}let L;try{L=await this.loadConfigurationStrategies(Q,!0,Z)}catch(z){let j=Q.__strictErrorHandling;if(z instanceof Error&&z.name==="ConfigNotFoundError"){if(j)throw z;L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`No configuration file found for "${Q.name||"config"}", using defaults with environment variables`]}}else if(z instanceof Error&&z.name==="ConfigLoadError"){let E=z.message.includes("EACCES")||z.message.includes("EPERM")||z.message.includes("permission denied"),W=!E&&(z.message.includes("syntax")||z.message.includes("Expected")||z.message.includes("Unexpected")||z.message.includes("BuildMessage")||z.message.includes("errors building")),G=z.message.includes("Configuration must export a valid object")||z.message.includes("Configuration file is empty and exports nothing");if(j&&(G||E))throw z;if(W&&(!j||!G))L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading error, using defaults: ${z.message}`]};else throw z}else L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${z instanceof Error?z.message:String(z)}`]}}if(U||_)await this.validateConfiguration(L.config,U,_,Q.name);if(Z?.enabled&&L)this.cacheResult(Q.name||"",L,Z,Q);if(Y?.enabled){let z={operation:"loadConfig",duration:Date.now()-$,configName:Q.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(z);if(Y.slowThreshold&&z.duration>Y.slowThreshold)R9.warn(`Slow configuration loading detected: ${z.duration}ms for ${Q.name}`);L.metrics=z}return L}catch(L){let z=Date.now()-$;throw R9.error(`Configuration loading failed after ${z}ms:`,[L instanceof Error?L:Error(String(L))]),L}}async loadConfigurationStrategies(X,$=!1,Z){let{name:Y="",alias:U,cwd:_,configDir:Q,defaultConfig:L,checkEnv:z=!0,arrayStrategy:j="replace",verbose:E=!1}=X,W=_||e9.cwd(),G=[],J=await this.loadLocalConfiguration(Y,U,W,Q,L,j,E,z,Z);if(J)return G.push(...this.getLocalSearchPaths(Y,U,W,Q)),this.finalizeResult(J,G,z,Y,E);let V=await this.loadHomeConfiguration(Y,U,L,j,E,z);if(V)return G.push(...this.getHomeSearchPaths(Y,U)),this.finalizeResult(V,G,z,Y,E);let F=await this.loadPackageJsonConfiguration(Y,U,W,L,j,E,z);if(F)return G.push(o0(W,"package.json")),this.finalizeResult(F,G,z,Y,E);if(G.push(...this.getAllSearchPaths(Y,U,W,Q)),$)throw m9.configNotFound(Y,G,U);return{...await this.applyEnvironmentVariables(Y,L,z,E),warnings:[`No configuration file found for "${Y}"${U?` or alias "${U}"`:""}, using defaults with environment variables`]}}async loadLocalConfiguration(X,$,Z,Y,U,_,Q,L,z){let j=L?rX(X,U,Q):U,E=this.getLocalDirectories(Z,Y);for(let W of E){if(Q)R9.info(`Searching for configuration in: ${W}`);let G=this.fileLoader.generateConfigPaths(X,W,$),J=await this.fileLoader.tryLoadFromPaths(G,j,{arrayStrategy:_,verbose:Q,cacheTtl:z?.ttl,useCache:!z?.ttl||z.ttl>100});if(J){if(Q)R9.success(`Configuration loaded from: ${J.source.path}`);return J}}return null}async loadHomeConfiguration(X,$,Z,Y,U,_){if(!X)return null;let Q=_?rX(X,Z,U):Z,L=[o0(EX(),".config",X),o0(EX(),".config"),EX()];for(let z of L){if(U)R9.info(`Checking home directory: ${z}`);let j=this.fileLoader.generateConfigPaths(X,z,$),E=await this.fileLoader.tryLoadFromPaths(j,Q,{arrayStrategy:Y,verbose:U});if(E){if(U)R9.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration(X,$,Z,Y,U,_,Q){let L=Q?rX(X,Y,_):Y;try{let z=o0(Z,"package.json");if(!I1(z))return null;let j=await import(z),E=j[X],W=X;if(!E&&$)E=j[$],W=$;if(E&&typeof E==="object"&&!Array.isArray(E)){if(_)R9.success(`Configuration loaded from package.json: ${W}`);return{config:$5(L,E,U),source:{type:"package.json",path:z,priority:30,timestamp:new Date}}}}catch(z){if(_)R9.warn("Failed to load package.json:",[z instanceof Error?z:Error(String(z))])}return null}async applyEnvironmentVariables(X,$,Z,Y){if(!Z||!X||typeof $!=="object"||$===null||Array.isArray($))return{config:$,source:{type:"default",priority:10,timestamp:new Date}};return{config:rX(X,$,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(X,$,Z,Y,U){return{config:X.config,source:X.source,path:X.source.path}}async validateConfiguration(X,$,Z,Y){let U=[];if(Z){let _=Z(X);if(_)U.push(..._)}if($){let _=await this.validator.validateConfiguration(X,$);if(!_.isValid)U.push(..._.errors.map((Q)=>Q.path?`${Q.path}: ${Q.message}`:Q.message))}if(U.length>0)throw m9.configValidation(Y||"unknown",U,Y)}checkCache(X,$){let Z=this.generateCacheKey(X,$);return hX.get(Z)||null}cacheResult(X,$,Z,Y){let U=this.generateCacheKey(X,Y);hX.set(U,$,void 0,Z.ttl)}generateCacheKey(X,$){let Z=[X];if($.alias)Z.push(`alias:${$.alias}`);if($.cwd)Z.push(`cwd:${$.cwd}`);if($.configDir)Z.push(`configDir:${$.configDir}`);if("checkEnv"in $)Z.push(`checkEnv:${$.checkEnv}`);return Z.join("|")}getLocalDirectories(X,$){return Array.from(new Set([X,o0(X,"config"),o0(X,".config"),$?o0(X,$):void 0].filter(Boolean)))}getAllSearchPaths(X,$,Z,Y){let U=[];return U.push(...this.getLocalSearchPaths(X,$,Z,Y)),U.push(...this.getHomeSearchPaths(X,$)),U.push(o0(Z,"package.json")),U}getLocalSearchPaths(X,$,Z,Y){let U=this.getLocalDirectories(Z,Y),_=[];for(let Q of U)_.push(...this.fileLoader.generateConfigPaths(X,Q,$));return _}getHomeSearchPaths(X,$){if(!X)return[];let Z=[o0(EX(),".config",X),o0(EX(),".config"),EX()],Y=[];for(let U of Z)Y.push(...this.fileLoader.generateConfigPaths(X,U,$));return Y}async loadConfigWithResult(X){return this.loadConfig(X)}}function ZY(X){let Z=!(X.message.includes("EACCES")||X.message.includes("EPERM")||X.message.includes("permission denied"))&&(X.message.includes("syntax")||X.message.includes("Expected")||X.message.includes("Unexpected")||X.message.includes("BuildMessage")),Y=X.message.includes("Configuration must export a valid object")||X.message.includes("Configuration file is empty and exports nothing");return Z||Y}async function P4(X){return x9.loadConfig({...X,__strictErrorHandling:!0})}async function s6(X){let $="defaultConfig"in X&&X.defaultConfig!==void 0?X.defaultConfig:{},Z="cache"in X||"performance"in X||"schema"in X||"validate"in X;try{let Y;if(Z)Y=await x9.loadConfig(X);else Y=await x9.loadConfig({...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??$}catch(Y){let U=Y instanceof Error?Y.name:"UnknownError",_=Y instanceof Error?Y.message:String(Y);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||_.includes("config"))&&X.verbose)R9.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let L=Z?{...X,defaultConfig:$}:{...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in X?X.checkEnv!==!1:!0)return(await x9.applyEnvironmentVariables(L.name||"",$,!0,L.verbose||!1))?.config??$;return $}}async function T4(X={defaultConfig:{}}){if(typeof X==="string"){let{cwd:$}=await import("process");try{return(await x9.loadConfig({name:X,cwd:$(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Z){if(Z instanceof Error&&(Z.name==="ConfigNotFoundError"||Z.name==="ConfigLoadError"&&ZY(Z)))return(await x9.applyEnvironmentVariables(X,{},!0,!1)).config;throw Z}}try{return(await x9.loadConfig({...X,cwd:X.cwd||e9.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch($){if($ instanceof Error&&($.name==="ConfigNotFoundError"||$.name==="ConfigLoadError"&&ZY($)))return(await x9.applyEnvironmentVariables(X.name||"",X.defaultConfig||{},X.checkEnv!==!1,X.verbose||!1)).config;throw $}}async function N4(X,$,Z="replace"){let Y=new _Z;try{let U=await Y.loadFromPath(X,$,{arrayStrategy:Z,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function rX(X,$,Z=!1){let Y=new UZ,U=X.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(Q,L=[]){let z={...Q};for(let[j,E]of Object.entries(Q)){let W=[...L,j],G=[`${U}_${W.join("_").toUpperCase()}`,`${U}_${W.map((F)=>F.toUpperCase()).join("")}`,`${U}_${W.map((F)=>F.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],J,V;for(let F of G)if(J=e9.env[F],J!==void 0){V=F;break}if(J!==void 0&&V)if(typeof E==="boolean")z[j]=["true","1","yes"].includes(J.toLowerCase());else if(typeof E==="number"){let F=Number(J);if(!Number.isNaN(F))z[j]=F}else if(Array.isArray(E))try{z[j]=JSON.parse(J)}catch{z[j]=J.split(",").map((F)=>F.trim())}else z[j]=J;else if(E&&typeof E==="object"&&!Array.isArray(E))z[j]=_(E,W)}return z}return _($)}function S4(X){let $=o0(e9.cwd(),X.configDir),Z=o0(e9.cwd(),X.generatedDir),Y=o0(Z,"config-types.ts");if(!I1(B5(Y)))D2(B5(Y),{recursive:!0,mode:511});let U=I1($)?M2($).map((Q)=>Q.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],_=`// Generated by bunfig v${I_}
|
|
36
|
-
export type ConfigNames = ${U.length?`'${U.join("' | '")}'`:"string"}
|
|
37
|
-
`;H2(Y,_,{mode:438})}function A4(X){let $=null,Z=null,Y=()=>{if(!Z)Z=s6(X).then((_)=>{return $=_,_},(_)=>{let Q="defaultConfig"in X?X.defaultConfig:{};if($=Q,"verbose"in X&&X.verbose)R9.warn("Config loading failed, using defaults:",[_ instanceof Error?_:Error(String(_))]);return Q});return Z},U="defaultConfig"in X?X.defaultConfig:{};return $=U,Y(),new Proxy({},{get(_,Q){if($)return $[Q];let L=U[Q];return Y(),L},has(_,Q){return Q in($||U)},ownKeys(){return Object.keys($||U)},getOwnPropertyDescriptor(_,Q){return Object.getOwnPropertyDescriptor($||U,Q)},set(_,Q,L){if(!$)$={...U};return $[Q]=L,!0}})}function k4(X){let $=s5(i2.cwd(),X?.configDir||"./config");function Z(){if(!u2($))return[];let U=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),_=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],Q=n2($).filter((z)=>U.has(wZ(z))).map((z)=>({base:z.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:z})),L=new Map;for(let{base:z,file:j}of Q){let E=wZ(j).toLowerCase(),W=L.get(z);if(!W){L.set(z,j);continue}let G=wZ(W).toLowerCase();if(_.indexOf(E)<_.indexOf(G))L.set(z,j)}return Array.from(L.entries()).map(([z,j])=>({base:z,file:j})).sort((z,j)=>z.base.localeCompare(j.base))}function Y(){let U=Z(),_=U.map((j)=>j.base),Q=_.length?_.map((j)=>`'${j}'`).join(" | "):"string",L=U.length?`{
|
|
38
|
-
${U.map((j)=>{let E=s5($,j.file).replace(/\\/g,"/");return` '${j.base}': typeof import('${E}').default`}).join(`,
|
|
39
|
-
`)}
|
|
40
|
-
}`:"Record<string, any>";return`export type ConfigNames = ${Q}
|
|
41
|
-
export type ConfigByName = ${L}
|
|
42
|
-
export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
|
|
43
|
-
export type ConfigOf = Config
|
|
44
|
-
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(_)=>{return{path:_.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Y(),loader:"ts"}})}}}function x4(X,$={}){let Z=h$.cwd();while(Z.includes("storage"))Z=o5(Z,"..");let Y=o5(Z,X||"");if($?.relative)return s2(h$.cwd(),Y);return Y}function x0(){if(A9.env.NODE_ENV==="test"||A9.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function B4(){if(A9.env.NODE_ENV==="test"||A9.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof A9<"u"){let X=A9.type;if(X==="renderer"||X==="worker")return!1;return!!(A9.versions&&(A9.versions.node||A9.versions.bun))}return!1}class o6{async format(X){let $=await B4(),Z=await this.getMetadata($);return JSON.stringify({timestamp:X.timestamp.toISOString(),level:X.level,name:X.name,message:X.message,metadata:Z})}async getMetadata(X){if(X){let{hostname:$}=await import("os");return{pid:KX.pid,hostname:$(),environment:KX.env.NODE_ENV||"development",platform:KX.platform,version:KX.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:KX.env.NODE_ENV||KX.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class d${name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(X,$={}){this.name=X,this.config={...Q8},this.options=this.normalizeOptions($),this.formatter=this.options.formatter||new o6,this.enabled=$.enabled??!0,this.fancy=$.fancy??!0,this.tagFormat=$.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=$.timestampPosition??"right",this.environment=$.environment??E0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig($);let Z={...$},Y=$.timestamp!==void 0;if(Y)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:Y||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),_=this.generateKey();this.currentKeyId=U,this.keys.set(U,_),this.encryptionKeys.set(U,{key:_,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(X){if(!this.fingersCrossedConfig)return!1;let $={debug:0,info:1,success:2,warning:3,error:4},Z=this.fingersCrossedConfig.activationLevel??"error";return $[X]>=$[Z]}initializeFingersCrossedConfig(X){if(!X.fingersCrossedEnabled&&X.fingersCrossed)return{...C$,...X.fingersCrossed};if(!X.fingersCrossedEnabled)return null;if(!X.fingersCrossed)return{...C$};return{...C$,...X.fingersCrossed}}normalizeOptions(X){let $={format:"json",level:"info",logDirectory:Q8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Z={...$,...Object.fromEntries(Object.entries(X).filter(([,Y])=>Y!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=$.level;return Z}shouldWriteToFile(){return!x0()&&this.config.writeToFile===!0}async writeToFile(X){let Z=(async()=>{let U,_=0,Q=3,L=1000;while(_<Q)try{try{try{await e2(this.config.logDirectory,e5.F_OK|e5.W_OK)}catch(j){if(j instanceof Error&&"code"in j)if(j.code==="ENOENT")await X4(this.config.logDirectory,{recursive:!0,mode:493});else if(j.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw j;else throw j}}catch(j){throw console.error("Debug: [writeToFile] Failed to create log directory:",j),j}let z=this.validateEncryptionConfig()?(await this.encrypt(X)).encrypted:H9.from(X);try{if(!s8(this.currentLogFile))await TZ(this.currentLogFile,"",{mode:420});if(U=t5(this.currentLogFile,"a",420),t2(U,z,{flag:"a"}),a5(U),U!==void 0)PZ(U),U=void 0;if((await IX(this.currentLogFile)).size===0){if(await TZ(this.currentLogFile,z,{flag:"w",mode:420}),(await IX(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(j){let E=j;if(E.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(E.code)){if(_<Q-1){let W=typeof E.message==="string"?E.message:"Unknown error";console.error(`Network error during write attempt ${_+1}/${Q}:`,W);let G=L*2**_;await new Promise((J)=>setTimeout(J,G)),_++;continue}}if(E?.code&&["ENOSPC","EDQUOT"].includes(E.code))throw Error(`Disk quota exceeded or no space left on device: ${E.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",E),E}finally{if(U!==void 0)try{PZ(U)}catch(j){console.error("Debug: [writeToFile] Error closing file descriptor:",j)}}}catch(z){if(_===Q-1){let E=z,W=typeof E.message==="string"?E.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",W),z}_++;let j=L*2**(_-1);await new Promise((E)=>setTimeout(E,j))}})();this.pendingOperations.push(Z);let Y=this.pendingOperations.length-1;try{await Z}catch(U){throw console.error("Debug: [writeToFile] Error in operation:",U),U}finally{this.pendingOperations.splice(Y,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return RX(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return RX(this.config.logDirectory,`${this.name}.log`);let X=new Date().toISOString().split("T")[0];return RX(this.config.logDirectory,`${this.name}-${X}.log`)}setupRotation(){if(x0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let X=this.config.rotation,$;switch(X.frequency){case"daily":$=86400000;break;case"weekly":$=604800000;break;case"monthly":$=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},$)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let $=this.config.rotation.keyRotation;if(!$?.enabled)return;let Z=typeof $.interval==="number"?$.interval:60,Y=Math.max(Z,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((U)=>{console.error("Error rotating keys:",U)})},Y)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let $=this.config.rotation.keyRotation,Z=this.generateKeyId(),Y=this.generateKey();this.currentKeyId=Z,this.keys.set(Z,Y),this.encryptionKeys.set(Z,{key:Y,createdAt:new Date});let U=Array.from(this.encryptionKeys.entries()).sort(([,L],[,z])=>z.createdAt.getTime()-L.createdAt.getTime()),_=typeof $.maxKeys==="number"?$.maxKeys:1,Q=Math.max(1,_);if(U.length>Q)for(let[L]of U.slice(Q))this.encryptionKeys.delete(L),this.keys.delete(L)}generateKeyId(){return qZ(16).toString("hex")}generateKey(){return qZ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let X=this.keys.get(this.currentKeyId);if(!X)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:X,id:this.currentKeyId}}encrypt(X){let{key:$}=this.getCurrentKey(),Z=qZ(16),Y=o2("aes-256-gcm",$,Z),U=H9.isBuffer(X)?X:H9.from(X,"utf8"),_=Y.update(U),Q=Y.final(),L=_.length+Q.length,z=Y.getAuthTag(),j=H9.allocUnsafe(16+L+16);return Z.copy(j,0),_.copy(j,16),Q.copy(j,16+_.length),z.copy(j,16+L),{encrypted:j,iv:Z}}async compressData(X){return new Promise(($,Z)=>{let Y=$Y(),U=[];Y.on("data",(_)=>U.push(_)),Y.on("end",()=>$(H9.from(H9.concat(U)))),Y.on("error",Z),Y.write(X),Y.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let X={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let $=this.config.rotation.encrypt;return{...X,...$}}return X}async rotateLog(){if(x0())return;if(!this.shouldWriteToFile())return;let X=await IX(this.currentLogFile).catch(()=>null);if(!X)return;let $=this.config.rotation;if(typeof $==="boolean")return;if($.maxSize&&X.size>=$.maxSize){let Z=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await o8(this.config.logDirectory),_=U.filter((z)=>z.startsWith(this.name)&&/\.log\.\d+$/.test(z)).sort((z,j)=>{let E=Number.parseInt(z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),Q=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,L=`${Z}.${Q}`;if(await IX(Z).catch(()=>null))try{if(await XY(Z,L),$.compress)try{let z=`${L}.gz`;await this.compressLogFile(L,z),await r8(L)}catch(z){console.error("Error compressing rotated file:",z)}if(_.length===0&&!U.some((z)=>z.endsWith(".log.1")))try{let z=`${Z}.1`;await TZ(z,"")}catch(z){console.error("Error creating backup file:",z)}}catch(z){console.error(`Error during rotation: ${z instanceof Error?z.message:String(z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),_=Z.replace(/\.log$/,`-${U}.log`);if(await IX(Z).catch(()=>null))await XY(Z,_)}if(this.currentLogFile=Y,$.maxFiles){let _=(await o8(this.config.logDirectory)).filter((Q)=>Q.startsWith(this.name)).sort((Q,L)=>L.localeCompare(Q));for(let Q of _.slice($.maxFiles))await r8(RX(this.config.logDirectory,Q))}}}async compressLogFile(X,$){let Z=r5(X),Y=a2($),U=$Y();await Y4(Z,U,Y)}async handleFingersCrossedBuffer(X,$){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(X)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let Y=await this.formatter.format(Z);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile($);console.log($)}}shouldLog(X){if(!this.enabled)return!1;let $={debug:0,info:1,success:2,warning:3,error:4};return $[X]>=$[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((X)=>{if(X instanceof Promise)return X.catch(($)=>{console.error("Error in pending write operation:",$)});return Promise.resolve()})),s8(this.currentLogFile))try{let X=t5(this.currentLogFile,"r+");a5(X),PZ(X)}catch(X){console.error(`Error flushing file: ${X}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let X of this.pendingOperations)if(typeof X.cancel==="function")X.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(X){console.error("Error waiting for pending operations:",X)}if(!x0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let $=(await o8(this.config.logDirectory)).filter((Z)=>(Z.includes("temp")||Z.includes(".tmp"))&&Z.includes(this.name));for(let Z of $)try{await r8(RX(this.config.logDirectory,Z))}catch(Y){console.error(`Failed to delete temp file ${Z}:`,Y)}}catch(X){console.error("Error cleaning up temporary files:",X)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(X){if(!X)return"";return`${this.tagFormat.prefix}${X}${this.tagFormat.suffix}`}formatFileTimestamp(X){return`[${X.toISOString()}]`}formatConsoleTimestamp(X){return this.shouldStyleConsole()?O0.gray(X.toLocaleTimeString()):X.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||x0())return!1;let X=typeof E0.env.NO_COLOR<"u",$=E0.env.FORCE_COLOR==="0";if(X||$)return!1;return!!(typeof E0.stderr<"u"&&E0.stderr.isTTY||typeof E0.stdout<"u"&&E0.stdout.isTTY)}formatConsoleMessage(X){let{timestamp:$,icon:Z="",tag:Y="",message:U,level:_,showTimestamp:Q=!0}=X,L=(J)=>J.replace(this.ANSI_PATTERN,"");if(!this.fancy){let J=[];if(Q)J.push($);if(_==="warning")J.push("WARN");else if(_==="error")J.push("ERROR");else if(Z)J.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)J.push(Y.replace(/[[\]]/g,""));return J.push(U),J.join(" ")}let z=E0.stdout.columns||120,j="";if(_==="warning"||_==="error")j=`${Z} ${U}`;else if(_==="info"||_==="success")j=`${Z} ${Y} ${U}`;else j=`${Z} ${Y} ${O0.cyan(U)}`;if(!Q)return j.trim();let E=L(j).trim().length,W=L($).length,G=Math.max(1,z-2-E-W);return`${j.trim()}${" ".repeat(G)}${$}`}formatMessage(X,$){if($.length===1&&Array.isArray($[0]))return X.replace(/\{(\d+)\}/g,(_,Q)=>{let L=Number.parseInt(Q,10);return L<$[0].length?String($[0][L]):_});let Z=/%([sdijfo%])/g,Y=0,U=X.replace(Z,(_,Q)=>{if(Q==="%")return"%";if(Y>=$.length)return _;let L=$[Y++];switch(Q){case"s":return String(L);case"d":case"i":return Number(L).toString();case"j":case"o":return JSON.stringify(L,null,2);default:return _}});if(Y<$.length)U+=` ${$.slice(Y).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return U}formatMarkdown(X){if(!X)return X;let $=X;return $=$.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Z,Y,U)=>{let _=O0.underline(O0.blue(Y)),Q=this.toAbsoluteFilePath(U);if(Q&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let L=`file://${encodeURI(Q)}`,z="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${L}\x1B\\${_}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${_}\x1B]8;;\x1B\\`;return _}),$=$.replace(/`([^`]+)`/g,(Z,Y)=>O0.bgGray(Y)),$=$.replace(/\*\*([^*]+)\*\*/g,(Z,Y)=>O0.bold(Y)),$=$.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Z,Y)=>O0.italic(Y)),$=$.replace(/(?<!_)_([^_]+)_(?!_)/g,(Z,Y)=>O0.italic(Y)),$=$.replace(/~([^~]+)~/g,(Z,Y)=>O0.strikethrough(Y)),$}supportsHyperlinks(){if(x0())return!1;let X=E0.env;if(!X)return!1;if(X.TERM_PROGRAM==="iTerm.app"||X.TERM_PROGRAM==="vscode"||X.TERM_PROGRAM==="WezTerm")return!0;if(X.WT_SESSION)return!0;if(X.TERM==="xterm-kitty")return!0;let $=X.VTE_VERSION?Number.parseInt(X.VTE_VERSION,10):0;if(!Number.isNaN($)&&$>=5000)return!0;return!1}toAbsoluteFilePath(X){try{let $=X;if($.startsWith("file://"))$=$.replace(/^file:\/\//,"");if($.startsWith("~")){let Z=E0.env.HOME||"";if(Z)$=$.replace(/^~(?=$|\/)/,Z)}if($4($)||$.startsWith("./")||$.startsWith("../"))$=Z4($);else return null;return s8($)?$:null}catch{return null}}buildOutputTexts(X){let $=this.shouldStyleConsole()?this.formatMarkdown(X):X,Z=X.replace(this.ANSI_PATTERN,"");return{consoleText:$,fileText:Z}}async log(X,$,...Z){if(!this.shouldLog(X))return;let Y=new Date,U=this.formatConsoleTimestamp(Y),_=this.formatFileTimestamp(Y),Q,L;if($ instanceof Error)Q=$.message,L=$.stack;else Q=this.formatMessage($,Z);let{consoleText:z,fileText:j}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let W=this.options.showIcons===!1?"":zU[X],G=this.options.showTags!==!1&&this.name?O0.gray(this.formatTag(this.name)):"",J;switch(X){case"debug":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:O0.gray(z),level:X}),console.error(J);break;case"info":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"success":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:O0.green(z),level:X}),console.error(J);break;case"warning":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"error":if(J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.error(J),L){let V=L.split(`
|
|
45
|
-
`);for(let F of V)if(F.trim()&&!F.includes(Q))console.error(this.formatConsoleMessage({timestamp:U,message:O0.gray(` ${F}`),level:X,showTimestamp:!1}))}break}}else if(!x0()){if(console.error(`${_} ${this.environment}.${X.toUpperCase()}: ${Q}`),L)console.error(L)}let E=`${_} ${this.environment}.${X.toUpperCase()}: ${j}
|
|
46
|
-
`;if(L)E+=`${L}
|
|
47
|
-
`;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress(X,$=""){let Z={update:(L,z)=>{},finish:(L)=>{},interrupt:(L,z)=>{}};if(!this.enabled)return Z;let Y=30;if(this.activeProgressBar={total:Math.max(1,X||1),current:0,message:$||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!x0()&&E0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(L,z)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,L),this.activeProgressBar.total),z!==void 0)this.activeProgressBar.message=z;if(this.shouldStyleConsole()&&!x0()&&E0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(L)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,L)},interrupt:(L,z="info")=>{if(!x0()&&E0.stdout.isTTY)E0.stdout.write(`
|
|
48
|
-
`);if(this[z==="warning"?"warn":z](L),this.activeProgressBar&&this.shouldStyleConsole()&&!x0()&&E0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(X){let $=performance.now();if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?O0.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":O0.blue("\u25D0"),tag:Z,message:`${O0.cyan(X)}...`}))}return async(Z)=>{if(!this.enabled)return;let Y=performance.now(),U=Math.round(Y-$),_=`${X} completed in ${U}ms`,Q=new Date,L=this.formatConsoleTimestamp(Q),j=`${this.formatFileTimestamp(Q)} ${this.environment}.INFO: ${_}`;if(Z)j+=` ${JSON.stringify(Z)}`;if(j+=`
|
|
49
|
-
`,j=j.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let E=this.options.showTags!==!1&&this.name?O0.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:L,icon:this.options.showIcons===!1?"":O0.green("\u2713"),tag:E,message:`${_}${Z?` ${JSON.stringify(Z)}`:""}`}))}else if(!x0())console.error(j.trim());if(this.shouldWriteToFile())await this.writeToFile(j)}}async debug(X,...$){await this.log("debug",X,...$)}async info(X,...$){await this.log("info",X,...$)}async success(X,...$){await this.log("success",X,...$)}async warn(X,...$){await this.log("warning",X,...$)}async error(X,...$){await this.log("error",X,...$)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let X=this.config.rotation,{encrypt:$}=X;return!!$}async only(X){if(!this.enabled)return;return await X()}isEnabled(){return this.enabled}setEnabled(X){this.enabled=X}extend(X){let $=`${this.name}:${X}`,Z=new d$($,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Z),Z}createReadStream(){if(x0())throw Error("createReadStream is not supported in browser environments");if(!s8(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return r5(this.currentLogFile,{encoding:"utf8"})}async decrypt(X){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let $=this.config.rotation;if(!$.encrypt||typeof $.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Z=this.keys.get(this.currentKeyId);try{let Y=H9.isBuffer(X)?X:H9.from(X,"base64"),U=Y.subarray(0,16),_=Y.subarray(Y.length-16),Q=Y.subarray(16,Y.length-16),L=r2("aes-256-gcm",Z,U);L.setAuthTag(_);let z=L.update(Q),j=L.final(),E=z.length+j.length,W=H9.allocUnsafe(E);return z.copy(W,0),j.copy(W,z.length),W.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return x0()}isServerMode(){return!x0()}setTestEncryptionKey(X,$){this.currentKeyId=X,this.keys.set(X,$)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(X){if(!this.enabled)return;let $=new Date,Z=this.formatConsoleTimestamp($),Y=this.formatFileTimestamp($),{consoleText:U,fileText:_}=this.buildOutputTexts(X);if(this.shouldStyleConsole()){let L=U.split(`
|
|
50
|
-
`),z=Math.max(...L.map((G)=>G.length))+2,j=`\u250C${"\u2500".repeat(z)}\u2510`,E=`\u2514${"\u2500".repeat(z)}\u2518`,W=L.map((G)=>{return this.formatConsoleMessage({timestamp:Z,message:O0.cyan(G),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Z,message:O0.cyan(j),showTimestamp:!1})),W.forEach((G)=>console.error(G)),console.error(this.formatConsoleMessage({timestamp:Z,message:O0.cyan(E),showTimestamp:!1}))}else if(!x0())console.error(`${Y} ${this.environment}.INFO: [BOX] ${_}`);let Q=`${Y} ${this.environment}.INFO: [BOX] ${_}
|
|
51
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Q)}async prompt(X){if(x0())return Promise.resolve(!0);return new Promise(($)=>{console.error(`${O0.cyan("?")} ${X} (y/n) `);let Z=(Y)=>{let U=Y.toString().trim().toLowerCase();E0.stdin.removeListener("data",Z);try{if(typeof E0.stdin.setRawMode==="function")E0.stdin.setRawMode(!1)}catch{}E0.stdin.pause(),console.error(""),$(U==="y"||U==="yes")};try{if(typeof E0.stdin.setRawMode==="function")E0.stdin.setRawMode(!0)}catch{}E0.stdin.resume(),E0.stdin.once("data",Z)})}setFancy(X){this.fancy=X}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(X,...$){if(!this.enabled)return;let Z=X;if($&&$.length>0){let z=/%([sdijfo%])/g,j=0;if(Z=X.replace(z,(E,W)=>{if(W==="%")return"%";if(j>=$.length)return E;let G=$[j++];switch(W){case"s":return String(G);case"d":case"i":return Number(G).toString();case"j":case"o":return JSON.stringify(G,null,2);default:return E}}),j<$.length)Z+=` ${$.slice(j).map((E)=>typeof E==="object"?JSON.stringify(E,null,2):String(E)).join(" ")}`}let{consoleText:Y,fileText:U}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let z=this.options.showTags!==!1&&this.name?O0.gray(this.formatTag(this.name)):"",j=this.options.showIcons===!1?"":`${O0.blue("\u25D0")} `;console.error(`${j}${z} ${O0.cyan(Y)}`)}let L=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
52
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(L)}renderProgressBar(X,$=!1){if(!this.enabled||!this.shouldStyleConsole()||!E0.stdout.isTTY)return;let Z=Math.min(100,Math.max(0,Math.round(X.current/X.total*100))),Y=Math.round(X.barLength*Z/100),U=X.barLength-Y,_=O0.green("\u2501".repeat(Y)),Q=O0.gray("\u2501".repeat(U)),L=`[${_}${Q}]`,z=`${Z}%`.padStart(4),j=X.message?` ${X.message}`:"",E=this.options.showIcons===!1?"":$||Z===100?O0.green("\u2713"):O0.blue("\u25B6"),W=this.options.showTags!==!1&&this.name?` ${O0.gray(this.formatTag(this.name))}`:"",G=`\r${E}${W} ${L} ${z}${j}`,J=E0.stdout.columns||80,V=" ".repeat(Math.max(0,J-G.replace(this.ANSI_PATTERN,"").length));if(X.lastRenderedLine=`${G}${V}`,E0.stdout.write(X.lastRenderedLine),$)E0.stdout.write(`
|
|
53
|
-
`)}finishProgressBar(X,$){if(!this.enabled||!this.fancy||x0()||!E0.stdout.isTTY){this.activeProgressBar=null;return}if(X.current<X.total)X.current=X.total;if($)X.message=$;this.renderProgressBar(X,!0),this.activeProgressBar=null}async clear(X={}){if(x0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let $=await o8(this.config.logDirectory),Z=[];for(let Y of $){if(!(X.name?new RegExp(X.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let _=RX(this.config.logDirectory,Y);if(X.before)try{if((await IX(_)).mtime>=X.before)continue}catch(Q){console.error(`Failed to get stats for file ${_}:`,Q);continue}Z.push(_)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let Y of Z)try{await r8(Y),console.warn(`Deleted log file: ${Y}`)}catch(U){console.error(`Failed to delete log file ${Y}:`,U)}console.warn("Log clearing process finished.")}catch($){console.error("Error during log clearing process:",$)}}}async function y4(X,$={}){let{maxRetries:Z=3,retryDelay:Y=1000,isRetryable:U=()=>!0,fallback:_}=$,Q=Error("Unknown error occurred");for(let L=0;L<=Z;L++)try{return await X()}catch(z){if(Q=z instanceof Error?z:Error(String(z)),L===Z||!U(Q))break;if(Y>0)await new Promise((j)=>setTimeout(j,Y))}if(_!==void 0)return _;throw Q instanceof Error?Q:Error(`Unknown error: ${String(Q)}`)}class Y5{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(X,$)=>$==="boolean"||["true","false","1","0","yes","no"].includes(X.toLowerCase()),parse:(X)=>{let $=X.toLowerCase();return["true","1","yes"].includes($)}},{name:"number",canParse:(X,$)=>$==="number"||!Number.isNaN(Number(X))&&!Number.isNaN(Number.parseFloat(X)),parse:(X)=>{let $=Number(X);if(Number.isNaN($))throw TypeError(`Cannot parse "${X}" as number`);return $}},{name:"array",canParse:(X,$)=>$==="array"||X.startsWith("[")||X.includes(","),parse:(X)=>{try{let $=JSON.parse(X);if(Array.isArray($))return $}catch{}return X.split(",").map(($)=>$.trim())}},{name:"json",canParse:(X,$)=>$==="object"||(X.startsWith("{")&&X.endsWith("}")||X.startsWith("[")&&X.endsWith("]")),parse:(X)=>{try{return JSON.parse(X)}catch($){throw Error(`Cannot parse "${X}" as JSON: ${$}`)}}}]}async applyEnvironmentVariables(X,$,Z={}){let{prefix:Y,useCamelCase:U=!0,useBackwardCompatibility:_=!0,customParsers:Q={},verbose:L=!1,trackPerformance:z=!0}=Z,j=async()=>{if(!X)return{config:$,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix(X),W={...$};return this.processObject(W,[],E,{useCamelCase:U,useBackwardCompatibility:_,customParsers:Q,verbose:L,configName:X}),{config:W,source:{type:"environment",priority:50,timestamp:new Date}}};if(z)return QZ.track("applyEnvironmentVariables",j,{configName:X});return j()}generateEnvPrefix(X){return X.toUpperCase().replace(/-/g,"_")}formatEnvKey(X,$){if(!$)return X.toUpperCase();return X.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=Q.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),z=`${Z}_${L.join("_")}`,j=Y.useBackwardCompatibility?`${Z}_${Q.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.processObject(_,Q,Z,Y);else{let E=a8.env[z]||(j?a8.env[j]:void 0);if(E!==void 0){if(Y.verbose){let W=a8.env[z]?z:j}try{X[U]=this.parseEnvironmentValue(E,typeof _,z,Y.customParsers,Y.configName)}catch(W){if(W instanceof P1)throw W;throw XX.envVar(z,E,typeof _,Y.configName)}}}}}parseEnvironmentValue(X,$,Z,Y,U){for(let[_,Q]of Object.entries(Y))try{return Q(X)}catch{continue}for(let _ of this.defaultParsers)if(_.canParse(X,$))try{return _.parse(X)}catch{throw XX.envVar(Z,X,`${$} (via ${_.name} parser)`,U)}return X}getEnvironmentVariables(X){let $={},Z=X.toUpperCase();for(let[Y,U]of Object.entries(a8.env))if(Y.startsWith(Z)&&U!==void 0)$[Y]=U;return $}validateEnvironmentVariable(X,$,Z){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(X))Y.push(`Environment variable key "${X}" should only contain uppercase letters, numbers, and underscores`);if(Z)try{this.parseEnvironmentValue(X,$,Z,{})}catch(U){Y.push(`Cannot parse value "${$}" as ${Z}: ${U}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs(X,$,Z={}){let{prefix:Y,format:U="text"}=Z,_=Y||this.generateEnvPrefix(X),Q=[];switch(this.extractEnvVarInfo($,[],_,Q),U){case"markdown":return this.formatAsMarkdown(Q,X);case"json":return JSON.stringify(Q,null,2);default:return this.formatAsText(Q,X)}}extractEnvVarInfo(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=`${Z}_${Q.map((z)=>this.formatEnvKey(z,!0)).join("_")}`;if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.extractEnvVarInfo(_,Q,Z,Y);else Y.push({key:L,type:Array.isArray(_)?"array":typeof _,description:`Configuration for ${Q.join(".")}`,example:this.generateExample(_)})}}generateExample(X){if(Array.isArray(X))return JSON.stringify(X);if(typeof X==="object"&&X!==null)return JSON.stringify(X);return String(X)}formatAsText(X,$){let Z=`Environment Variables for ${$}:
|
|
54
|
-
|
|
55
|
-
`;for(let Y of X)Z+=`${Y.key}
|
|
56
|
-
`,Z+=` Type: ${Y.type}
|
|
57
|
-
`,Z+=` Description: ${Y.description}
|
|
58
|
-
`,Z+=` Example: ${Y.example}
|
|
59
|
-
|
|
60
|
-
`;return Z}formatAsMarkdown(X,$){let Z=`# Environment Variables for ${$}
|
|
61
|
-
|
|
62
|
-
`;Z+=`| Variable | Type | Description | Example |
|
|
63
|
-
`,Z+=`|----------|------|-------------|----------|
|
|
64
|
-
`;for(let Y of X)Z+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
|
|
65
|
-
`;return Z}}function h4(X,$,Z={}){return r6(X,$,Z,new WeakMap)}function r6(X,$,Z,Y){let{arrayMergeMode:U="replace",skipNullish:_=!1,customMerger:Q}=Z;if($===null||$===void 0)return _?X:$;if(Q){let L=Q(X,$);if(L!==void 0)return L}if(Array.isArray($)||Array.isArray(X))return a6(X,$,U,Y);if(!F9($)||!F9(X))return $;return g4(X,$,Z,Y)}function a6(X,$,Z,Y){if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray(X)&&!Array.isArray($))return $;if(Array.isArray($)&&Array.isArray(X))switch(Z){case"replace":return $;case"concat":return v4(X,$);case"smart":return b4(X,$,Y);default:return $}return $}function v4(X,$){let Z=[...$];for(let Y of X)if(!Z.some((U)=>C1(U,Y)))Z.push(Y);return Z}function b4(X,$,Z){if($.length===0)return X;if(X.length===0)return $;if(F9($[0])&&F9(X[0]))return f4(X,$,Z);if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}function f4(X,$,Z){let Y=[...$];for(let U of X){if(!F9(U)){Y.push(U);continue}let _=["id","name","key","path","type"],Q=!1;for(let L of _)if(L in U){if(Y.find((j)=>F9(j)&&(L in j)&&j[L]===U[L])){Q=!0;break}}if(!Q)Y.push(U)}return Y}function g4(X,$,Z,Y){let U=$;if(F9(U)&&Y.has(U))return Y.get(U);let _={...X};if(F9(U))Y.set(U,_);for(let Q in U){if(!Object.prototype.hasOwnProperty.call(U,Q))continue;let L=U[Q],z=_[Q];if(Z.skipNullish&&(L===null||L===void 0))continue;if(L===null||L===void 0){_[Q]=L;continue}if(F9(L)&&F9(z))_[Q]=r6(z,L,Z,Y);else if(Array.isArray(L)||Array.isArray(z))_[Q]=a6(z,L,Z.arrayMergeMode||"smart",Y);else _[Q]=L}return _}function t6(X,$,Z="replace"){return h4(X,$,{arrayMergeMode:Z==="replace"?"replace":"smart",skipNullish:!0})}function C1(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!C1(X[Z],$[Z]))return!1;return!0}if(F9(X)&&F9($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!C1(X[U],$[U]))return!1}return!0}return!1}function F9(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}class e6{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(X,$,Z={}){let{arrayStrategy:Y="replace",useCache:U=!0,cacheTtl:_,trackPerformance:Q=!0,verbose:L=!1}=Z;if(U){let j=A8.getWithFileCheck("file",X);if(j){if(L)console.log(`Configuration loaded from cache: ${X}`);return j}}let z=async()=>{if(!t8(X))return null;try{let j=`?t=${Date.now()}`,E=await import(X+j),W=E.default||E,G="default"in E,J=Object.keys(E).length>0;if(!G&&!J)throw new p$(X,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof W!=="object"||W===null||Array.isArray(W))throw new p$(X,Error("Configuration must export a valid object"),"unknown");let R={config:t6($,W,Y),source:{type:"file",path:X,priority:100,timestamp:new Date}};if(U)A8.setWithFileCheck("file",R,X,_);return R}catch(j){throw j instanceof Error?XX.configLoad(X,j):XX.configLoad(X,Error(String(j)))}};if(Q)return QZ.track("loadFromPath",z,{path:X});return z()}async tryLoadFromPaths(X,$,Z={}){for(let Y of X)try{let U=await this.loadFromPath(Y,$,Z);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(Z.verbose)console.warn(`Failed to load config from ${Y}:`,U)}return null}generateConfigPaths(X,$,Z){let Y=this.generateNamePatterns(X,Z),U=[];for(let _ of Y)for(let Q of this.extensions)U.push(NZ($,`${_}${Q}`));return U}generateNamePatterns(X,$){let Z=[];if(Z.push("config",".config"),X)Z.push(X,`.${X}.config`,`${X}.config`,`.${X}`);let Y=$===void 0?[]:Array.isArray($)?$:[$];for(let _ of Y){if(!_)continue;if(Z.push(_,`.${_}.config`,`${_}.config`,`.${_}`),X)Z.push(`${X}.${_}.config`,`.${X}.${_}.config`)}let U=new Set;return Z.filter((_)=>{if(!_||U.has(_))return!1;return U.add(_),!0})}checkFileAccess(X){return y4(async()=>{return t8(X)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(X,$,Z){let Y=[];if(!t8(X))return Y;if($||Z){let U=this.generateNamePatterns($||"",Z);for(let _ of U)for(let Q of this.extensions){let L=NZ(X,`${_}${Q}`);if(await this.checkFileAccess(L))Y.push(L)}}else try{let{readdirSync:U}=await import("fs"),_=U(X);for(let Q of _)if(this.looksLikeConfigFile(Q)){let L=NZ(X,Q);if(await this.checkFileAccess(L))Y.push(L)}}catch{return[]}return Y}looksLikeConfigFile(X){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some((Z)=>Z.test(X))}async validateConfigFile(X){let $=[];try{if(!t8(X))return $.push("Configuration file does not exist"),$;let Z=await import(X),Y=Z.default||Z;if(Y===void 0)$.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)$.push("Configuration must be an object");else if(Array.isArray(Y))$.push("Configuration cannot be an array at the root level");if(X.endsWith(".json"))try{let{readFileSync:U}=await import("fs"),_=U(X,"utf8");JSON.parse(_)}catch(U){$.push(`Invalid JSON syntax: ${U}`)}}catch(Z){$.push(`Failed to load configuration file: ${Z}`)}return $}async getFileModificationTime(X){try{let{statSync:$}=await import("fs");return $(X).mtime}catch{return null}}async preloadConfigurations(X,$={}){let Z=new Map;return await Promise.allSettled(X.map(async(Y)=>{try{let U=await this.loadFromPath(Y,{},$);if(U)Z.set(Y,U.config)}catch(U){if($.verbose)console.warn(`Failed to preload ${Y}:`,U)}})),Z}}class XU{async validateConfiguration(X,$,Z={}){let{stopOnFirstError:Y=!1,validateRequired:U=!0,validateTypes:_=!0,customRules:Q=[],trackPerformance:L=!0,verbose:z=!1}=Z,j=async()=>{let E=[],W=[],G={stopOnFirstError:Y,validateRequired:U,validateTypes:_,customRules:Q,trackPerformance:L,verbose:z};try{if(typeof $==="string")return await this.validateWithSchemaFile(X,$,G);else if(Array.isArray($))return this.validateWithRules(X,[...$,...Q],G);else return this.validateWithJSONSchema(X,$,G)}catch(J){return E.push({path:"",message:`Validation failed: ${J}`,rule:"system"}),{isValid:!1,errors:E,warnings:W}}};if(L)return await QZ.track("validateConfiguration",j);return j()}async validateWithSchemaFile(X,$,Z){try{if(!U4($))throw new c$($,[{path:"",message:"Schema file does not exist"}]);let Y=await import($),U=Y.default||Y;if(Array.isArray(U))return this.validateWithRules(X,U,Z);else return this.validateWithJSONSchema(X,U,Z)}catch(Y){throw new c$($,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema(X,$,Z){let Y=[],U=[];return this.validateObjectAgainstSchema(X,$,"",Y,U,Z),{isValid:Y.length===0,errors:Y,warnings:U}}validateObjectAgainstSchema(X,$,Z,Y,U,_){if(_.validateTypes&&$.type){let Q=Array.isArray(X)?"array":typeof X,L=Array.isArray($.type)?$.type:[$.type];if(!L.includes(Q)){if(Y.push({path:Z,message:`Expected type ${L.join(" or ")}, got ${Q}`,expected:L.join(" or "),actual:Q,rule:"type"}),_.stopOnFirstError)return}}if($.enum&&!$.enum.includes(X)){if(Y.push({path:Z,message:`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"}),_.stopOnFirstError)return}if(typeof X==="string"){if($.minLength!==void 0&&X.length<$.minLength)Y.push({path:Z,message:`String length must be at least ${$.minLength}`,expected:`>= ${$.minLength}`,actual:X.length,rule:"minLength"});if($.maxLength!==void 0&&X.length>$.maxLength)Y.push({path:Z,message:`String length must not exceed ${$.maxLength}`,expected:`<= ${$.maxLength}`,actual:X.length,rule:"maxLength"});if($.pattern){if(!new RegExp($.pattern).test(X))Y.push({path:Z,message:`String does not match pattern ${$.pattern}`,expected:$.pattern,actual:X,rule:"pattern"})}}if(typeof X==="number"){if($.minimum!==void 0&&X<$.minimum)Y.push({path:Z,message:`Value must be at least ${$.minimum}`,expected:`>= ${$.minimum}`,actual:X,rule:"minimum"});if($.maximum!==void 0&&X>$.maximum)Y.push({path:Z,message:`Value must not exceed ${$.maximum}`,expected:`<= ${$.maximum}`,actual:X,rule:"maximum"})}if(Array.isArray(X)&&$.items)for(let Q=0;Q<X.length;Q++){let L=Z?`${Z}[${Q}]`:`[${Q}]`;if(this.validateObjectAgainstSchema(X[Q],$.items,L,Y,U,_),_.stopOnFirstError&&Y.length>0)return}if(X&&typeof X==="object"&&!Array.isArray(X)){let Q=X;if(_.validateRequired&&$.required){for(let L of $.required)if(!(L in Q)){if(Y.push({path:Z?`${Z}.${L}`:L,message:`Missing required property '${L}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if($.properties){for(let[L,z]of Object.entries($.properties))if(L in Q){let j=Z?`${Z}.${L}`:L;if(this.validateObjectAgainstSchema(Q[L],z,j,Y,U,_),_.stopOnFirstError&&Y.length>0)return}}if($.additionalProperties===!1){let L=new Set(Object.keys($.properties||{}));for(let z of Object.keys(Q))if(!L.has(z))U.push({path:Z?`${Z}.${z}`:z,message:`Additional property '${z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(X,$,Z){let Y=[],U=[];for(let _ of $)try{let Q=this.getValueByPath(X,_.path),L=this.validateWithRule(Q,_,_.path);if(Y.push(...L),Z.stopOnFirstError&&Y.length>0)break}catch(Q){Y.push({path:_.path,message:`Rule validation failed: ${Q}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:U}}validateWithRule(X,$,Z){let Y=[];if($.required&&(X===void 0||X===null))return Y.push({path:Z,message:$.message||`Property '${Z}' is required`,expected:"required",rule:"required"}),Y;if(X===void 0||X===null)return Y;if($.type){let U=Array.isArray(X)?"array":typeof X;if(U!==$.type)Y.push({path:Z,message:$.message||`Expected type ${$.type}, got ${U}`,expected:$.type,actual:U,rule:"type"})}if($.min!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U<$.min)Y.push({path:Z,message:$.message||`Value must be at least ${$.min}`,expected:`>= ${$.min}`,actual:U,rule:"min"})}if($.max!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U>$.max)Y.push({path:Z,message:$.message||`Value must not exceed ${$.max}`,expected:`<= ${$.max}`,actual:U,rule:"max"})}if($.pattern&&typeof X==="string"){if(!$.pattern.test(X))Y.push({path:Z,message:$.message||`Value does not match pattern ${$.pattern}`,expected:$.pattern.toString(),actual:X,rule:"pattern"})}if($.enum&&!$.enum.includes(X))Y.push({path:Z,message:$.message||`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"});if($.validator){let U=$.validator(X);if(U)Y.push({path:Z,message:$.message||U,rule:"custom"})}return Y}getValueByPath(X,$){if(!$)return X;let Z=$.split("."),Y=X;for(let U of Z)if(Y&&typeof Y==="object"&&U in Y)Y=Y[U];else return;return Y}generateRulesFromInterface(X){let $=[],Z=X.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of Z){let[,U,_,Q]=Y;$.push({path:U,required:!_,type:this.mapTypeScriptType(Q)})}return $}mapTypeScriptType(X){switch(X.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:LU},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function d4(X){if(!X)return"";let $=Array.isArray(X)?X.filter(Boolean):[X];if($.length===0)return"";if($.length===1)return` or alias "${$[0]}"`;return` or aliases ${$.map((Z)=>`"${Z}"`).join(", ")}`}class $U{fileLoader=new e6;envProcessor=new Y5;validator=new XU;async loadConfig(X){let $=Date.now(),{cache:Z,performance:Y,schema:U,validate:_,...Q}=X;try{if(Z?.enabled){let z=this.checkCache(Q.name||"",Q);if(z)return z}let L;try{L=await this.loadConfigurationStrategies(Q,!0,Z)}catch(z){let j=Q.__strictErrorHandling;if(z instanceof Error&&z.name==="ConfigNotFoundError"){if(j)throw z;L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`No configuration file found for "${Q.name||"config"}", using defaults with environment variables`]}}else if(z instanceof Error&&z.name==="ConfigLoadError"){let E=z.message.includes("EACCES")||z.message.includes("EPERM")||z.message.includes("permission denied"),W=!E&&(z.message.includes("syntax")||z.message.includes("Expected")||z.message.includes("Unexpected")||z.message.includes("BuildMessage")||z.message.includes("errors building")),G=z.message.includes("Configuration must export a valid object")||z.message.includes("Configuration file is empty and exports nothing");if(j&&(G||E))throw z;if(W&&(!j||!G))L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading error, using defaults: ${z.message}`]};else throw z}else L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${z instanceof Error?z.message:String(z)}`]}}if(U||_)await this.validateConfiguration(L.config,U,_,Q.name);if(Z?.enabled&&L)this.cacheResult(Q.name||"",L,Z,Q);if(Y?.enabled){let z={operation:"loadConfig",duration:Date.now()-$,configName:Q.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(z);if(Y.slowThreshold&&z.duration>Y.slowThreshold)I9.warn(`Slow configuration loading detected: ${z.duration}ms for ${Q.name}`);L.metrics=z}return L}catch(L){if(L instanceof Error&&L.name==="ConfigNotFoundError")throw L;let z=Date.now()-$;throw I9.error(`Configuration loading failed after ${z}ms:`,[L instanceof Error?L:Error(String(L))]),L}}async loadConfigurationStrategies(X,$=!1,Z){let{name:Y="",alias:U,cwd:_,configDir:Q,defaultConfig:L,checkEnv:z=!0,arrayStrategy:j="replace",verbose:E=!1}=X,W=_||k$.cwd(),G=[],J=await this.loadLocalConfiguration(Y,U,W,Q,L,j,E,z,Z);if(J)return G.push(...this.getLocalSearchPaths(Y,U,W,Q)),this.finalizeResult(J,G,z,Y,E);let V=await this.loadHomeConfiguration(Y,U,L,j,E,z);if(V)return G.push(...this.getHomeSearchPaths(Y,U)),this.finalizeResult(V,G,z,Y,E);let F=await this.loadPackageJsonConfiguration(Y,U,W,L,j,E,z);if(F)return G.push(L9(W,"package.json")),this.finalizeResult(F,G,z,Y,E);if(G.push(...this.getAllSearchPaths(Y,U,W,Q)),$)throw XX.configNotFound(Y,G,U);return{...await this.applyEnvironmentVariables(Y,L,z,E),warnings:[`No configuration file found for "${Y}"${d4(U)}, using defaults with environment variables`]}}async loadLocalConfiguration(X,$,Z,Y,U,_,Q,L,z){let j=L?X$(X,U,Q):U,E=this.getLocalDirectories(Z,Y);for(let W of E){if(Q)I9.info(`Searching for configuration in: ${W}`);let G=this.fileLoader.generateConfigPaths(X,W,$),J=await this.fileLoader.tryLoadFromPaths(G,j,{arrayStrategy:_,verbose:Q,cacheTtl:z?.ttl,useCache:!z?.ttl||z.ttl>100});if(J){if(Q)I9.success(`Configuration loaded from: ${J.source.path}`);return J}}return null}async loadHomeConfiguration(X,$,Z,Y,U,_){if(!X)return null;let Q=_?X$(X,Z,U):Z,L=[L9(jX(),".config",X),L9(jX(),".config"),jX()];for(let z of L){if(U)I9.info(`Checking home directory: ${z}`);let j=this.fileLoader.generateConfigPaths(X,z,$),E=await this.fileLoader.tryLoadFromPaths(j,Q,{arrayStrategy:Y,verbose:U});if(E){if(U)I9.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration(X,$,Z,Y,U,_,Q){let L=Q?X$(X,Y,_):Y;try{let z=L9(Z,"package.json");if(!R2(z))return null;let j={};try{j=JSON.parse(K2(z,"utf8"))}catch(G){if(_)I9.warn("Failed to parse package.json:",[G instanceof Error?G:Error(String(G))]);return null}let E=j[X],W=X;if(!E&&$){let G=Array.isArray($)?$:[$];for(let J of G){if(!J)continue;if(j[J]){E=j[J],W=J;break}}}if(E&&typeof E==="object"&&!Array.isArray(E)){if(_)I9.success(`Configuration loaded from package.json: ${W}`);return{config:t6(L,E,U),source:{type:"package.json",path:z,priority:30,timestamp:new Date}}}}catch(z){if(_)I9.warn("Failed to load package.json:",[z instanceof Error?z:Error(String(z))])}return null}async applyEnvironmentVariables(X,$,Z,Y){if(!Z||!X||typeof $!=="object"||$===null||Array.isArray($))return{config:$,source:{type:"default",priority:10,timestamp:new Date}};return{config:X$(X,$,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(X,$,Z,Y,U){return{config:X.config,source:X.source,path:X.source.path}}async validateConfiguration(X,$,Z,Y){let U=[];if(Z){let _=Z(X);if(_)U.push(..._)}if($){let _=await this.validator.validateConfiguration(X,$);if(!_.isValid)U.push(..._.errors.map((Q)=>Q.path?`${Q.path}: ${Q.message}`:Q.message))}if(U.length>0)throw XX.configValidation(Y||"unknown",U,Y)}checkCache(X,$){let Z=this.generateCacheKey(X,$);return A8.get(Z)||null}cacheResult(X,$,Z,Y){let U=this.generateCacheKey(X,Y);A8.set(U,$,void 0,Z.ttl)}generateCacheKey(X,$){let Z=[X];if($.alias){let Y=Array.isArray($.alias)?$.alias.join(","):$.alias;Z.push(`alias:${Y}`)}if($.cwd)Z.push(`cwd:${$.cwd}`);if($.configDir)Z.push(`configDir:${$.configDir}`);if("checkEnv"in $)Z.push(`checkEnv:${$.checkEnv}`);return Z.join("|")}getLocalDirectories(X,$){return Array.from(new Set([X,L9(X,"config"),L9(X,".config"),$?L9(X,$):void 0].filter(Boolean)))}getAllSearchPaths(X,$,Z,Y){let U=[];return U.push(...this.getLocalSearchPaths(X,$,Z,Y)),U.push(...this.getHomeSearchPaths(X,$)),U.push(L9(Z,"package.json")),U}getLocalSearchPaths(X,$,Z,Y){let U=this.getLocalDirectories(Z,Y),_=[];for(let Q of U)_.push(...this.fileLoader.generateConfigPaths(X,Q,$));return _}getHomeSearchPaths(X,$){if(!X)return[];let Z=[L9(jX(),".config",X),L9(jX(),".config"),jX()],Y=[];for(let U of Z)Y.push(...this.fileLoader.generateConfigPaths(X,U,$));return Y}async loadConfigWithResult(X){return this.loadConfig(X)}}async function p4(X){let $="defaultConfig"in X&&X.defaultConfig!==void 0?X.defaultConfig:{},Z="cache"in X||"performance"in X||"schema"in X||"validate"in X;try{let Y;if(Z)Y=await w$.loadConfig(X);else Y=await w$.loadConfig({...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??$}catch(Y){let U=Y instanceof Error?Y.name:"UnknownError",_=Y instanceof Error?Y.message:String(Y);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||_.includes("config"))&&X.verbose)I9.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let L=Z?{...X,defaultConfig:$}:{...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in X?X.checkEnv!==!1:!0)return(await w$.applyEnvironmentVariables(L.name||"",$,!0,L.verbose||!1))?.config??$;return $}}function X$(X,$,Z=!1){let Y=new Y5,U=X.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(Q,L=[]){let z={...Q};for(let[j,E]of Object.entries(Q)){let W=[...L,j],G=[`${U}_${W.join("_").toUpperCase()}`,`${U}_${W.map((F)=>F.toUpperCase()).join("")}`,`${U}_${W.map((F)=>F.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],J,V;for(let F of G)if(J=k$.env[F],J!==void 0){V=F;break}if(J!==void 0&&V)if(typeof E==="boolean")z[j]=["true","1","yes"].includes(J.toLowerCase());else if(typeof E==="number"){let F=Number(J);if(!Number.isNaN(F))z[j]=F}else if(Array.isArray(E))try{z[j]=JSON.parse(J)}catch{z[j]=J.split(",").map((F)=>F.trim())}else z[j]=J;else if(E&&typeof E==="object"&&!Array.isArray(E))z[j]=_(E,W)}return z}return _($)}var A8,QZ,ZU,c4=(X)=>X,m4=(X,$)=>{for(var Z in $)ZU(X,Z,{get:$[Z],enumerable:!0,configurable:!0,set:_4.bind($,Z)})},u4=(X,$)=>()=>(X&&($=X(X=0)),$),SZ,YU,hX,k8,YY,n4,i4,UY,I$,w1,c0,w0,l4,_Y,s4,QY,o4,r4,AZ,a4,zY,LY,kZ,t4,e4,X_,$_,R$,UU,Z_,m0,Y_,U_,jY,K$,q1,B0,F0,__,EY,Q_,GY,z_,L_,xZ,j_,FY,OY,E_,BZ,G_,F_,O_,J_,W_,D$,_U,V_,I_="0.15.6",$9,M$,U8,yZ,hZ,H$,vZ,bZ,_8,fZ,gZ,m9,JY,QU,R9,x9,WY,VY,IY,RY,dZ,Q8,R_,y0,O0,K_,KY,D_,DY,M_,H_,pZ,C_,MY,HY,w_,cZ,q_,P_,T_,N_,S_,C$,zU,A_,W9,CY,p$,wY,qY,P1,PY,TY,c$,NY,SY,XX,LU,I9,w$,k_,x_,B_=e(()=>{A8=new g6,QZ=new d6,ZU=Object.defineProperty,SZ={},m4(SZ,{withErrorRecovery:()=>m6,tryLoadConfig:()=>N4,loadConfigWithResult:()=>P4,loadConfig:()=>s6,isRetryableError:()=>D4,isConfigNotFoundError:()=>K4,isBunfigError:()=>u6,globalPerformanceMonitor:()=>k8,globalCache:()=>hX,getEnvOrDefault:()=>M4,generateConfigTypes:()=>S4,defaultGeneratedDir:()=>VY,defaultConfigDir:()=>WY,deepMergeWithArrayStrategy:()=>$5,deepMerge:()=>n6,createLibraryConfig:()=>A4,config:()=>T4,bunfigPlugin:()=>k4,applyEnvVarsToConfig:()=>rX,TypeGenerationError:()=>bZ,SchemaValidationError:()=>_8,PluginError:()=>gZ,PerformanceMonitor:()=>D1,FileSystemError:()=>vZ,ErrorFactory:()=>m9,EnvVarError:()=>H$,EnvProcessor:()=>UZ,ConfigValidator:()=>Z5,ConfigValidationError:()=>yZ,ConfigNotFoundError:()=>M$,ConfigMergeError:()=>hZ,ConfigLoader:()=>H1,ConfigLoadError:()=>U8,ConfigFileLoader:()=>_Z,ConfigCache:()=>K1,CacheUtils:()=>YY,BunfigError:()=>$9,BrowserConfigError:()=>fZ,ArrayMergeStrategies:()=>JY}),IY=u4(async()=>{YU=import.meta.require,hX=new K1,k8=new D1,YY={createKey:Q4,isEquivalent:z4,estimateMemoryUsage:L4},n4=y$(R1.cwd(),"config"),i4=y$(R1.cwd(),"src/generated"),UY=B$.env.CLARITY_LOG_DIR||q2(G4(),"logs"),I$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:UY,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1},w1=await F4(),c0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,reset:"\x1B[0m"},w0=c0,l4=c0.red,_Y=c0.green,s4=c0.yellow,QY=c0.blue,o4=c0.magenta,r4=c0.cyan,AZ=c0.white,a4=c0.gray,zY=c0.bgRed,LY=c0.bgYellow,kZ=c0.bold,t4=c0.dim,e4=c0.italic,X_=c0.underline,$_=c0.reset,R$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},UU={debug:"\uD83D\uDD0D",info:QY("\u2139"),success:_Y("\u2713"),warning:LY(AZ(kZ(" WARN "))),error:zY(AZ(kZ(" ERROR ")))},Z_=new b$("stacks"),m0=new b$("bunfig",{showTags:!0}),Y_=l0(S8.cwd(),"config"),U_=l0(S8.cwd(),"src/generated"),jY=x$.env.CLARITY_LOG_DIR||C2(V4(),"logs"),K$={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:jY,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},q1=await I4(),B0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bgGray:(X)=>`\x1B[100m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,strikethrough:(X)=>`\x1B[9m${X}\x1B[0m`,reset:"\x1B[0m"},F0=B0,__=B0.red,EY=B0.green,Q_=B0.yellow,GY=B0.blue,z_=B0.magenta,L_=B0.cyan,xZ=B0.white,j_=B0.gray,FY=B0.bgRed,OY=B0.bgYellow,E_=B0.bgGray,BZ=B0.bold,G_=B0.dim,F_=B0.italic,O_=B0.underline,J_=B0.strikethrough,W_=B0.reset,D$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},_U={debug:"\uD83D\uDD0D",info:GY("\u2139"),success:EY("\u2713"),warning:OY(xZ(BZ(" WARN "))),error:FY(xZ(BZ(" ERROR ")))},V_=new g$("stacks"),$9=class extends Error{timestamp;context;constructor($,Z={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,Y])=>`${Z}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},M$=class extends $9{code="CONFIG_NOT_FOUND";constructor($,Z,Y){let U=Y?` or alias "${Y}"`:"";super(`Configuration "${$}"${U} not found`,{configName:$,alias:Y,searchPaths:Z,searchPathCount:Z.length})}},U8=class extends $9{code="CONFIG_LOAD_ERROR";constructor($,Z,Y){super(`Failed to load configuration from "${$}": ${Z.message}`,{configPath:$,configName:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},yZ=class extends $9{code="CONFIG_VALIDATION_ERROR";constructor($,Z,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},hZ=class extends $9{code="CONFIG_MERGE_ERROR";constructor($,Z,Y,U){super(`Failed to merge configuration from "${$}" with "${Z}": ${Y.message}`,{sourcePath:$,targetPath:Z,configName:U,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},H$=class extends $9{code="ENV_VAR_ERROR";constructor($,Z,Y,U){super(`Failed to parse environment variable "${$}" with value "${Z}" as ${Y}`,{envKey:$,envValue:Z,expectedType:Y,configName:U})}},vZ=class extends $9{code="FILE_SYSTEM_ERROR";constructor($,Z,Y){super(`File system ${$} failed for "${Z}": ${Y.message}`,{operation:$,path:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},bZ=class extends $9{code="TYPE_GENERATION_ERROR";constructor($,Z,Y){super(`Failed to generate types from "${$}" to "${Z}": ${Y.message}`,{configDir:$,outputPath:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},_8=class extends $9{code="SCHEMA_VALIDATION_ERROR";constructor($,Z,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},fZ=class extends $9{code="BROWSER_CONFIG_ERROR";constructor($,Z,Y,U){super(`Failed to fetch configuration from "${$}": ${Z} ${Y}`,{endpoint:$,status:Z,statusText:Y,configName:U})}},gZ=class extends $9{code="PLUGIN_ERROR";constructor($,Z,Y){super(`Plugin "${$}" failed during ${Z}: ${Y.message}`,{pluginName:$,operation:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},m9={configNotFound(X,$,Z){return new M$(X,$,Z)},configLoad(X,$,Z){return new U8(X,$,Z)},configValidation(X,$,Z){return new yZ(X,$,Z)},configMerge(X,$,Z,Y){return new hZ(X,$,Z,Y)},envVar(X,$,Z,Y){return new H$(X,$,Z,Y)},fileSystem(X,$,Z){return new vZ(X,$,Z)},typeGeneration(X,$,Z){return new bZ(X,$,Z)},schemaValidation(X,$,Z){return new _8(X,$,Z)},browserConfig(X,$,Z,Y){return new fZ(X,$,Z,Y)},plugin(X,$,Z){return new gZ(X,$,Z)}},JY={replace:"replace",concat:"concat",smart:"smart"},QU=/^https?:\/\//,R9=new g$("bunfig",{showTags:!0}),x9=new H1,WY=o0(e9.cwd(),"config"),VY=o0(e9.cwd(),"src/generated")}),RY=h$.env.CLARITY_LOG_DIR||l2(x4(),"logs"),dZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:RY,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},Q8={...dZ},R_=(async()=>{try{let{loadConfig:X}=await IY().then(()=>SZ),$=await X({name:"clarity",alias:"logging",defaultConfig:dZ,cwd:h$.cwd()});if($)Object.assign(Q8,$)}catch{}return Q8})(),y0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bgGray:(X)=>`\x1B[100m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,strikethrough:(X)=>`\x1B[9m${X}\x1B[0m`,reset:"\x1B[0m"},O0=y0,K_=y0.red,KY=y0.green,D_=y0.yellow,DY=y0.blue,M_=y0.magenta,H_=y0.cyan,pZ=y0.white,C_=y0.gray,MY=y0.bgRed,HY=y0.bgYellow,w_=y0.bgGray,cZ=y0.bold,q_=y0.dim,P_=y0.italic,T_=y0.underline,N_=y0.strikethrough,S_=y0.reset,C$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},zU={debug:"\uD83D\uDD0D",info:DY("\u2139"),success:KY("\u2713"),warning:HY(pZ(cZ(" WARN "))),error:MY(pZ(cZ(" ERROR ")))},A_=new d$("stacks"),W9=class extends Error{timestamp;context;constructor($,Z={}){super($);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=Z,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let $=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([Z,Y])=>`${Z}: ${Y}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${$}`}},CY=class extends W9{code="CONFIG_NOT_FOUND";constructor($,Z,Y){let U=Y===void 0?[]:Array.isArray(Y)?Y.filter(Boolean):[Y],_="";if(U.length===1)_=` or alias "${U[0]}"`;else if(U.length>1)_=` or aliases ${U.map((Q)=>`"${Q}"`).join(", ")}`;super(`Configuration "${$}"${_} not found`,{configName:$,alias:Y,searchPaths:Z,searchPathCount:Z.length})}},p$=class extends W9{code="CONFIG_LOAD_ERROR";constructor($,Z,Y){super(`Failed to load configuration from "${$}": ${Z.message}`,{configPath:$,configName:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},wY=class extends W9{code="CONFIG_VALIDATION_ERROR";constructor($,Z,Y){super(`Configuration validation failed for "${$}"`,{configPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},qY=class extends W9{code="CONFIG_MERGE_ERROR";constructor($,Z,Y,U){super(`Failed to merge configuration from "${$}" with "${Z}": ${Y.message}`,{sourcePath:$,targetPath:Z,configName:U,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},P1=class extends W9{code="ENV_VAR_ERROR";constructor($,Z,Y,U){super(`Failed to parse environment variable "${$}" with value "${Z}" as ${Y}`,{envKey:$,envValue:Z,expectedType:Y,configName:U})}},PY=class extends W9{code="FILE_SYSTEM_ERROR";constructor($,Z,Y){super(`File system ${$} failed for "${Z}": ${Y.message}`,{operation:$,path:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},TY=class extends W9{code="TYPE_GENERATION_ERROR";constructor($,Z,Y){super(`Failed to generate types from "${$}" to "${Z}": ${Y.message}`,{configDir:$,outputPath:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},c$=class extends W9{code="SCHEMA_VALIDATION_ERROR";constructor($,Z,Y){super(`Schema validation failed${Y?` for config "${Y}"`:""}`,{schemaPath:$,configName:Y,validationErrors:Z,errorCount:Z.length})}},NY=class extends W9{code="BROWSER_CONFIG_ERROR";constructor($,Z,Y,U){super(`Failed to fetch configuration from "${$}": ${Z} ${Y}`,{endpoint:$,status:Z,statusText:Y,configName:U})}},SY=class extends W9{code="PLUGIN_ERROR";constructor($,Z,Y){super(`Plugin "${$}" failed during ${Z}: ${Y.message}`,{pluginName:$,operation:Z,originalError:Y.name,originalMessage:Y.message});this.cause=Y}},XX={configNotFound(X,$,Z){return new CY(X,$,Z)},configLoad(X,$,Z){return new p$(X,$,Z)},configValidation(X,$,Z){return new wY(X,$,Z)},configMerge(X,$,Z,Y){return new qY(X,$,Z,Y)},envVar(X,$,Z,Y){return new P1(X,$,Z,Y)},fileSystem(X,$,Z){return new PY(X,$,Z)},typeGeneration(X,$,Z){return new TY(X,$,Z)},schemaValidation(X,$,Z){return new c$(X,$,Z)},browserConfig(X,$,Z,Y){return new NY(X,$,Z,Y)},plugin(X,$,Z){return new SY(X,$,Z)}},LU=/^https?:\/\//,I9=new d$("bunfig",{showTags:!0}),w$=new $U,k_=L9(k$.cwd(),"config"),x_=L9(k$.cwd(),"src/generated")});function I0(X=v.dialect){return X==="mysql"||X==="singlestore"}function i(X){if(v.dialect==="postgres")return`$${X}`;return"?"}function f0(X,$=1){if(X<=0)return"";if(v.dialect==="postgres"){let Z=`$${$}`;for(let Y=1;Y<X;Y++)Z+=`, $${$+Y}`;return Z}return X===1?"?":`?${", ?".repeat(X-1)}`}async function wG(){if(!z8)z8=await p4({name:"query-builder",alias:"qb",defaultConfig:T1}),U5(z8);return v}function U5(X){if(X.dialect&&nX&&X.dialect!==nX){let $=`${nX}->${X.dialect}`;if(!N1.has($))N1.add($),console.warn(`[query-builder] setConfig({ dialect: '${X.dialect}' }) overrides a previous setConfig({ dialect: '${nX}' }). Config is process-wide; in-flight queries from the previous configuration may break. `+"Run conflicting connections in separate processes \u2014 see stacksjs/stacks#1862 #18.")}if(X.dialect)nX=X.dialect;if(Object.assign(v,X),X.database)v.database={...v.database,...X.database};if(X.timestamps)v.timestamps={...v.timestamps,...X.timestamps};if(X.pagination)v.pagination={...v.pagination,...X.pagination};if(X.softDeletes)v.softDeletes={...v.softDeletes,...X.softDeletes};if(z8)Object.assign(z8,v)}var T1,AY,v,z8=null,nX=null,N1,d0=e(()=>{B_(),T1={verbose:!0,dialect:"postgres",database:{database:"test_db",username:"postgres",password:"postgres",host:"localhost",port:5432},timestamps:{createdAt:"created_at",updatedAt:"updated_at",defaultOrderColumn:"created_at"},pagination:{defaultPerPage:25,cursorColumn:"id"},aliasing:{relationColumnAliasFormat:"table_column"},relations:{foreignKeyFormat:"singularParent_id",maxDepth:10,maxEagerLoad:50,detectCycles:!0},transactionDefaults:{retries:2,isolation:"read committed",sqlStates:["40001","40P01"],backoff:{baseMs:50,factor:2,maxMs:2000,jitter:!0}},sql:{randomFunction:"RANDOM()",sharedLockSyntax:"FOR SHARE",jsonContainsMode:"operator"},features:{distinctOn:!0},debug:{captureText:!0},hooks:{},softDeletes:{enabled:!1,column:"deleted_at",defaultFilter:!0}},AY=Symbol.for("bun-query-builder.config"),v=globalThis[AY]??={...T1},N1=new Set});function y_(){let X=v.sqlite?.pragmas;return Array.isArray(X)?X:jU}function _5(X){for(let $ of y_())try{X.run($)}catch{}}var jU,Q5=e(()=>{d0(),jU=["PRAGMA journal_mode = WAL","PRAGMA foreign_keys = ON","PRAGMA busy_timeout = 5000"]}),{SQL:kY}=globalThis.Bun;class EU{db;constructor(X){if(X!==":memory:"&&!X.startsWith(":")){let $=b_(X);if($&&$!==".")v_($,{recursive:!0})}this.db=new h_(X),_5(this.db)}query(X,$=[]){return this.db.prepare(X).all(...$)}run(X,$=[]){return this.db.prepare(X).run(...$)}close(){this.db.close()}get database(){return this.db}}function xY(X){return{__raw:!0,value:X,toString:()=>X}}function BY(X){let $=X.trimStart();for(;;)if($.startsWith("--")){let Z=$.indexOf(`
|
|
66
|
-
`);$=Z===-1?"":$.slice(Z+1).trimStart()}else if($.startsWith("/*")){let Z=$.indexOf("*/");$=Z===-1?"":$.slice(Z+2).trimStart()}else return $}function f_(X){let $=[],Z="",Y=!1,U=!1,_=!1,Q=!1;for(let z=0;z<X.length;z++){let j=X[z],E=X[z+1];if(!Y&&!U&&!Q&&j==="-"&&E==="-"){_=!0,Z+=j;continue}if(_&&(j===`
|
|
67
|
-
`||j==="\r")){_=!1,Z+=j;continue}if(!Y&&!U&&!_&&j==="/"&&E==="*"){Q=!0,Z+=j;continue}if(Q&&j==="*"&&E==="/"){Q=!1,Z+=j+E,z++;continue}if(_||Q){Z+=j;continue}if(j==="'"&&!U){if(Y&&E==="'"){Z+=j+E,z++;continue}Y=!Y,Z+=j;continue}if(j==='"'&&!Y){U=!U,Z+=j;continue}if(j===";"&&!Y&&!U){let W=BY(Z.trim());if(W)$.push(W);Z="";continue}Z+=j}let L=BY(Z.trim());if(L)$.push(L);return $}function yY(X){let $=new EU(X);function Z(_,...Q){let L=_[0],z=[];for(let j=0;j<Q.length;j++){let E=Q[j];if(E&&typeof E==="object"&&(E.__raw||E.raw)){let W=E.__raw?E.value:typeof E.raw==="string"?E.raw:E.raw();L+=W+(_[j+1]||"")}else if(E&&typeof E==="object"&&"sql"in E&&"values"in E)L+=E.sql+(_[j+1]||""),z.push(...E.values);else if(Array.isArray(E)){let W=E.map(()=>"?").join(", ");L+=W+(_[j+1]||""),z.push(...E)}else L+=`?${_[j+1]||""}`,z.push(E)}return{sql:L,values:z,execute:()=>{try{let j=L.trim().toUpperCase();if(j.startsWith("SELECT")||j.startsWith("PRAGMA")||/\bRETURNING\b/.test(j)){let E=$.query(L,z);return Promise.resolve(E)}else{let E=$.run(L,z);return Promise.resolve(E)}}catch(j){return Promise.reject(j)}},raw:()=>L,toString:()=>L,cancel:()=>{}}}function Y(_,...Q){if(Array.isArray(_)&&"raw"in _)return Z(_,...Q);if(typeof _==="string")return xY(_);return Z([""])}Y.raw=(_)=>xY(_),Y.unsafe=(_,Q=[])=>{let L=()=>{try{let z=_.trim().toUpperCase();if(z.startsWith("SELECT")||z.startsWith("PRAGMA")||/\bRETURNING\b/.test(z)){let j=$.query(_,Q);return Promise.resolve(j)}else{let j=$.run(_,Q);return Promise.resolve(j)}}catch(z){return Promise.reject(z)}};return{sql:_,values:Q,execute:L,then:(z,j)=>L().then(z,j),raw:()=>_,toString:()=>_,cancel:()=>{}}},Y.close=()=>{return $.close(),Promise.resolve()},Y.query=(_,Q)=>{try{let L=$.query(_,Q||[]);return Promise.resolve(L)}catch(L){return Promise.reject(L)}},Y.file=async(_,Q)=>{try{let{readFileSync:L}=await import("fs"),z=L(_,"utf-8"),j=f_(z);for(let E of j){let W=E.trim();if(!W||W.startsWith("--"))continue;let G=W.toUpperCase();if(G.startsWith("SELECT")||G.startsWith("PRAGMA"))$.query(E);else $.run(E)}return Promise.resolve([])}catch(L){return Promise.reject(L)}};let U=0;return Y.begin=async(_,Q)=>{let L=typeof _==="function"?_:Q;if(typeof L!=="function")throw TypeError("[query-builder] sqlite begin(): a transaction callback is required");let z=U>0,j=`qb_sp_${U}`;if(z)$.run(`SAVEPOINT ${j}`);else $.run("BEGIN");U++;try{let E=await L(Y);if(U--,z)$.run(`RELEASE SAVEPOINT ${j}`);else $.run("COMMIT");return E}catch(E){U--;try{if(z)$.run(`ROLLBACK TO SAVEPOINT ${j}`),$.run(`RELEASE SAVEPOINT ${j}`);else $.run("ROLLBACK")}catch{}throw E}},Y.savepoint=Y.begin,Y.beginDistributed=async()=>{throw Error("[query-builder] beginDistributed() (two-phase commit) is not supported on SQLite. Use begin()/transaction().")},Y._wrapper=$,Y}function g_(X){let $=X.replace(/^(?:sqlite|sqlite3|file):/i,"");if($===X)return X;return($.startsWith("///")?$.slice(2):$.startsWith("//")?$.slice(2):$)||":memory:"}function d_(X,$){if((X==="postgres"||X==="mysql"||X==="singlestore")&&$$.env.DB_CONNECTION===X){let j=$$.env,E=(j.DB_DATABASE||$.database||"").replace(/^['"]|['"]$/g,""),W=j.DB_USERNAME||$.username,G=j.DB_PASSWORD??$.password??"",J=j.DB_HOST||$.host||"localhost",V=j.DB_PORT||$.port,F=X==="postgres"?"postgres":"mysql",R=j.DB_SSL==="true"||j.DB_SSL==="1"||$.ssl?"?ssl=true":"";return`${F}://${W}:${G}@${J}${V?`:${V}`:""}/${E}${R}`}if($.url)return X==="sqlite"?g_($.url):$.url;let{database:Z,username:Y,password:U,host:_="localhost",port:Q,ssl:L}=$,z=L||$$.env.DB_SSL==="true"||$$.env.DB_SSL==="1"?"?ssl=true":"";switch(X){case"postgres":return`postgres://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"mysql":case"singlestore":return`mysql://${Y}:${U}@${_}${Q?`:${Q}`:""}/${Z}${z}`;case"sqlite":if(Z===":memory:")return":memory:";return Z||":memory:";default:throw Error(`Unsupported dialect: ${X}`)}}function GU(X){if(!X)return{};let $={},Z=(Y)=>Math.max(0,Math.round(Y/1000));if(typeof X.max==="number"&&Number.isFinite(X.max))$.max=X.max;if(typeof X.idleTimeoutMs==="number"&&Number.isFinite(X.idleTimeoutMs))$.idleTimeout=Z(X.idleTimeoutMs);if(typeof X.acquireTimeoutMs==="number"&&Number.isFinite(X.acquireTimeoutMs))$.connectionTimeout=Z(X.acquireTimeoutMs);if(typeof X.maxLifetimeMs==="number"&&Number.isFinite(X.maxLifetimeMs))$.maxLifetime=Z(X.maxLifetimeMs);return $}function p_(){let X=v.dialect,$=d_(X,v.database);try{if(X==="sqlite")return yY($);let Z=GU(v.database.pool);return Object.keys(Z).length>0?new kY($,Z):new kY($)}catch(Z){if(console.error(`[query-builder] Failed to create database connection for dialect '${X}': ${Z.message}`),X==="sqlite")return yY(":memory:");throw Z}}function c_(){let X=v.database;return JSON.stringify({dialect:v.dialect,database:X.database,username:X.username,password:X.password,host:X.host,port:X.port,url:X.url,pool:GU(X.pool)})}function vX(X=!1){let $=c_();if(X||aX!==null&&S1!==$||!aX)aX=p_(),S1=$;return aX}function SG(){aX=null,S1=null}async function mZ(X){try{return await X(vX())}catch($){if($?.code==="ERR_POSTGRES_CONNECTION_CLOSED"||$?.message?.includes("Connection closed")){console.log("-- Connection closed, creating fresh connection...");let Z=vX(!0);return await X(Z)}throw $}}function m_(){return new Proxy(function(){},{get(X,$){let Z=vX(),Y=Z[$];if(typeof Y==="function")return Y.bind(Z);return Y},apply(X,$,Z){return vX()(...Z)}})}var aX=null,S1=null,c,ZX=e(()=>{d0(),Q5(),c=m_()});async function AG(X={}){let $=X.iterations||1000,Z=X.operations?.split(",")||["select","insert","update","delete","count"];console.log("-- Running Query Builder Benchmarks"),console.log(`-- Iterations: ${$}`),console.log(`-- Operations: ${Z.join(", ")}`),console.log();let Y=H0();console.log("-- Setting up test table...");try{await c.unsafe("DROP TABLE IF EXISTS bench_users").execute(),await c.unsafe(`
|
|
68
|
-
CREATE TABLE bench_users (
|
|
69
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
70
|
-
name TEXT NOT NULL,
|
|
71
|
-
email TEXT NOT NULL,
|
|
72
|
-
active INTEGER DEFAULT 1,
|
|
73
|
-
created_at TEXT
|
|
74
|
-
)
|
|
75
|
-
`).execute();for(let Q=0;Q<100;Q++)await c.unsafe(`
|
|
76
|
-
INSERT INTO bench_users (name, email, created_at)
|
|
77
|
-
VALUES (?, ?, ?)
|
|
78
|
-
`,[`User ${Q}`,`user${Q}@example.com`,new Date().toISOString()]).execute();console.log("-- \u2713 Test table ready with 100 rows"),console.log()}catch(Q){throw console.error("-- Failed to setup test table:",Q),Q}let U=[];if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({active:1}).limit(10).execute(),Q.push(performance.now()-z)}U.push({operation:"SELECT with WHERE + LIMIT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("select")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").where({id:1}).first(),Q.push(performance.now()-z)}U.push({operation:"SELECT by ID (first)",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("count")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.selectFrom("bench_users").count(),Q.push(performance.now()-z)}U.push({operation:"COUNT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("insert")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.insertInto("bench_users").values({name:`Bench User ${L}`,email:`bench${L}@example.com`,created_at:new Date().toISOString()}).execute(),Q.push(performance.now()-z)}U.push({operation:"INSERT",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("update")){let Q=[];for(let L=0;L<$;L++){let z=performance.now();await Y.updateTable("bench_users").set({active:0}).where({id:1}).execute(),Q.push(performance.now()-z)}U.push({operation:"UPDATE by ID",avgTime:Q.reduce((L,z)=>L+z,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}if(Z.includes("delete")){let Q=[],L=[];for(let z=0;z<$;z++){let j=await Y.insertInto("bench_users").values({name:"To Delete",email:`delete${z}@example.com`,created_at:new Date().toISOString()}).execute();L.push(j)}for(let z=0;z<$;z++){let j=performance.now();await Y.deleteFrom("bench_users").where({id:L[z]}).execute(),Q.push(performance.now()-j)}U.push({operation:"DELETE by ID",avgTime:Q.reduce((z,j)=>z+j,0)/Q.length,minTime:Math.min(...Q),maxTime:Math.max(...Q),iterations:$})}console.log("-- Benchmark Results"),console.log();let _=Math.max(...U.map((Q)=>Q.operation.length));console.log("Operation".padEnd(_+2)+"Avg (ms)".padStart(12)+"Min (ms)".padStart(12)+"Max (ms)".padStart(12)+"Ops/sec".padStart(12)),console.log("-".repeat(_+2+12+12+12+12));for(let Q of U){let L=Q.operation.padEnd(_+2),z=Q.avgTime.toFixed(3).padStart(12),j=Q.minTime.toFixed(3).padStart(12),E=Q.maxTime.toFixed(3).padStart(12),W=(1000/Q.avgTime).toFixed(0).padStart(12);console.log(`${L}${z}${j}${E}${W}`)}console.log();try{await c.unsafe("DROP TABLE IF EXISTS bench_users").execute(),console.log("-- \u2713 Cleanup complete")}catch(Q){console.error("-- Warning: Failed to cleanup test table:",Q)}}var u_=e(()=>{ZX(),b0()});function n_(X){return X.endsWith("s")?X.slice(0,-1):X}function i_(X){if(X.endsWith("ies")&&X.length>3){let $=X.slice(0,-3),Z=$[$.length-1];if(Z&&!"aeiou".includes(Z))return`${$}y`}if(X.endsWith("es")&&X.length>2){let $=X.slice(0,-2);if($.endsWith("s")||$.endsWith("x")||$.endsWith("ch")||$.endsWith("sh"))return $}if(X.endsWith("s")&&!X.endsWith("ss")&&!X.endsWith("us")&&!X.endsWith("is"))return X.slice(0,-1);return X}function zZ(X){if(X==="none")return($)=>$;if(X==="inflect")return i_;return n_}function l_(X){return zZ(v.relations?.singularizeStrategy)(X)}function NX(X,$,Z,Y={}){let U=Y.singularize??l_,Q=X.relations?.[$]?.belongsToMany?.[Z];if(Q==null)return null;let L=typeof Q==="object",z=L?Q:null,j=L?z.model:Q,E=X.modelToTable[j]||j,W,G;if(z?.table)W=z.table;else if(z?.through){if(G=z.through,W=X.modelToTable[z.through],!W)throw Error(`[query-builder] belongsToMany relation '${Z}' on '${$}' references unknown through model '${z.through}'. Make sure '${z.through}' is registered via defineModels({...}).`)}else{let q=U($),C=U(E);W=[q,C].sort().join("_")}let J=z?.foreignKey??`${U($)}_id`,V=z?.relatedKey??`${U(E)}_id`,F={};if(z?.pivot?.columns)Object.assign(F,z.pivot.columns);if(G&&Y.models){let q=Y.models[G],C=q?.definition??q?.getDefinition?.()??q,S=C?.attributes??{};for(let[P,H]of Object.entries(S)){if(P===J||P===V||P===(C?.primaryKey??"id"))continue;F[P]={default:H?.default,nullable:H?.nullable,validation:H?.validation}}}let R=Boolean(z?.pivot?.timestamps),D=Object.keys(F);return{pivotTable:W,fkParent:J,fkRelated:V,pivotColumns:D,pivotColumnDefs:F,pivotModelName:G,timestamps:R,relatedModelName:j,relatedTable:E,hasConfig:L}}function*kG(X,$={}){let Z=X.relations;if(!Z)return;for(let[Y,U]of Object.entries(Z)){let _=U?.belongsToMany;if(!_)continue;for(let Q of Object.keys(_)){let L=NX(X,Y,Q,$);if(L)yield{parentTable:Y,relationKey:Q,resolved:L}}}}var FU=e(()=>{d0()});function m$(X){return typeof X==="object"&&X!==null&&"raw"in X&&typeof X.raw==="string"}function xG(X,...$){if(typeof X==="string")return{raw:X};let Z=X[0];for(let Y=0;Y<$.length;Y++)Z+=P9($[Y])+X[Y+1];return{raw:Z}}function t0(X){return I0(v.dialect)?`\`${X.replace(/`/g,"``")}\``:`"${X.replace(/"/g,'""')}"`}function Z$(X,$=1){let Z=Object.keys(X[0]??{}),Y=[],U=$,_=X.map((Q)=>{return`(${Z.map((z)=>{return Y.push(Q[z]),i(U++)}).join(", ")})`});return{colsSql:Z.map(t0).join(", "),valuesSql:_.join(", "),params:Y,nextIndex:U}}function iX(X){return Boolean(X&&(X.onSlowQuery||X.slowQueryThresholdMs!=null&&X.slowQueryThresholdMs>=0))}function hY(X){if(typeof X==="string")return X;if(m$(X))return X.raw;if(X&&typeof X==="object"){let $=X;if(typeof $.raw==="function")return String($.raw());if(typeof $.sql==="string")return $.sql;let Z=String(X);if(Z!=="[object Object]")return Z}throw TypeError(`[query-builder] select(): unsupported column ${String(X)} \u2014 pass a column name, a string[], or a SQL fragment (e.g. sql\`count(*) as c\`)`)}function p(X,$){if(!r.IDENTIFIER.test(X)){let Z=$?` in ${$}`:"";throw Error(`[query-builder] Invalid identifier${Z}: '${X}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`)}}function g0(X,$){if(typeof X!=="string")throw TypeError(`[query-builder] ${$}: operator must be a string, got ${typeof X}`);let Z=X.toLowerCase();if(!A1.has(Z))throw TypeError(`[query-builder] ${$}: refusing to use '${X}' as a SQL operator \u2014 not in the allowed set (${[...A1].join(", ")})`);return X}function Q9(X,$){if(typeof X!=="string"||X.length===0)throw TypeError(`[query-builder] ${$}: identifier must be a non-empty string, got ${typeof X}`);if(X.length>129)throw TypeError(`[query-builder] ${$}: identifier '${X}' too long`);let Z=X.split(".");if(Z.length>2)throw TypeError(`[query-builder] ${$}: identifier '${X}' has more than one dot \u2014 only \`table.column\` is allowed`);for(let Y of Z)if(!/^[A-Z_][A-Z0-9_]*$/i.test(Y))throw TypeError(`[query-builder] ${$}: identifier segment '${Y}' contains characters outside [A-Za-z0-9_]`)}function DX(X,$){if(typeof X==="string")return s_($),X;if(X===null||X===void 0)throw TypeError(`[query-builder] ${$}: fragment must be a SqlFragment, got ${X}`);if(m$(X))return X.raw;if(typeof X==="object"){let Z=X;if(typeof Z.raw==="string")return Z.raw;if(typeof Z.raw==="function"){let U=Z.raw();if(typeof U==="string")return U}if(typeof Z.sql==="string")return Z.sql;let Y=String(X);if(Y!=="[object Object]"&&Y!=="[object Promise]")return Y}throw TypeError(`[query-builder] ${$}: cannot render this value as a SQL fragment. `+"A Bun `sql`...`` query object cannot be converted to SQL text \u2014 pass a "+"string, or use the exported `raw` helper: raw`count(*) as c` / raw('age > 18').")}function s_(X){if(k1.has(X))return;k1.add(X),console.warn(`[query-builder] ${X}: bare string passed to a *Raw method. Prefer \`sql\`...\`\` tagged-template fragments so values are parameterised `+"instead of concatenated \u2014 concatenating request input into SQL is an "+"injection vector. This will become a hard error in a future release.")}function P9(X){if(X===null)return"NULL";if(typeof X==="number"&&Number.isFinite(X))return String(X);if(typeof X==="boolean")return X?"1":"0";if(typeof X==="string")return`'${X.replace(/'/g,"''")}'`;if(X instanceof Date)return`'${X.toISOString()}'`;throw TypeError(`[query-builder] subquery condition: refusing to interpolate value of type ${typeof X}`)}function o_(X,$){let Z=Array.isArray(X)?X:X?[X]:[],Y=[];if(Z.length)Y.push(`PARTITION BY ${Z.join(", ")}`);if($&&$.length)Y.push(`ORDER BY ${$.map(([U,_])=>`${U} ${_==="desc"?"DESC":"ASC"}`).join(", ")}`);return Y.length?`OVER (${Y.join(" ")})`:"OVER ()"}class OU{cache=new Map;maxSize=100;get(X){let $=this.cache.get(X);if(!$)return null;if(Date.now()>$.expiresAt)return this.cache.delete(X),null;return this.cache.delete(X),this.cache.set(X,$),$.data}set(X,$,Z){if(this.cache.has(X))this.cache.delete(X);if(this.cache.size>=this.maxSize){let Y=Date.now(),U=!1;for(let[_,Q]of this.cache)if(Y>Q.expiresAt){if(this.cache.delete(_),U=!0,this.cache.size<this.maxSize)break}if(!U){let _=this.cache.keys().next().value;if(_!==void 0)this.cache.delete(_)}}this.cache.set(X,{data:$,expiresAt:Date.now()+Z})}clear(){this.cache.clear()}setMaxSize(X){this.maxSize=Math.max(0,Math.floor(X));while(this.cache.size>this.maxSize){let $=this.cache.keys().next().value;if($===void 0)break;this.cache.delete($)}}}function r_(X){let $=String(X?.message||"").toLowerCase();return $.includes("deadlock")||$.includes("serialization failure")||$.includes("could not serialize access")||$.includes("deadlock found when trying to get lock")||$.includes("lock wait timeout exceeded")||$.includes("database is locked")||$.includes("busy")}function a_(X,$){if(!$||$.length===0)return!1;let Z=X&&(X.code||X.sqlState||X.sqlstate);if(!Z)return!1;return $.includes(Z)}function t_(X){return new Promise(($)=>setTimeout($,X))}function Y$(X){let $=tX.get(X);if($!==void 0)return $;let Z=e_(X);if(tX.size>=YQ)tX.clear();return tX.set(X,Z),Z}function e_(X){let $=[{key:"GROUP_BY",tokens:/^GROUP\s+BY\b/i},{key:"ORDER_BY",tokens:/^ORDER\s+BY\b/i},{key:"HAVING",tokens:/^HAVING\b/i},{key:"OFFSET",tokens:/^OFFSET\b/i},{key:"LIMIT",tokens:/^LIMIT\b/i},{key:"WHERE",tokens:/^WHERE\b/i}],Z=[],Y=0,U=!1,_="";for(let E=0;E<X.length;E++){let W=X[E];if(U){if(W===_){if(X[E+1]===_){E++;continue}U=!1}continue}if(W==="'"||W==='"'||W==="`"){U=!0,_=W;continue}if(W==="("){Y++;continue}if(W===")"){Y--;continue}if(Y!==0)continue;if(E===0||!/\s/.test(X[E-1]))continue;let G=X.charCodeAt(E)&-33;if(G!==71&&G!==79&&G!==72&&G!==76&&G!==87)continue;let J=X.slice(E);for(let{key:V,tokens:F}of $){let R=J.match(F);if(!R)continue;Z.push({key:V,start:E}),E+=R[0].length-1;break}}if(Z.length<=1)return X;let Q=X.slice(0,Z[0].start).trimEnd(),L={};for(let E=0;E<Z.length;E++){let W=Z[E].start,G=E+1<Z.length?Z[E+1].start:X.length,J=X.slice(W,G).trim();if(!L[Z[E].key])L[Z[E].key]=[];L[Z[E].key].push(J)}let j=["WHERE","GROUP_BY","HAVING","ORDER_BY","LIMIT","OFFSET"].filter((E)=>L[E]).map((E)=>L[E].join(" ")).join(" ");return j?`${Q} ${j}`:Q}function XQ(X,$){let Z=Math.max(1,$?.baseMs??50),Y=Math.max(1,$?.factor??2),U=Math.max(Z,$?.maxMs??2000),_=Math.min(U,Z*Y**Math.max(0,X-1));if($?.jitter)_=Math.min(U,_*(0.9+Math.random()*0.2));return Math.floor(_)}function H0(X){let $=X?.sql??vX(),Z=X?.meta,Y=X?.schema,U=new Map;function _(G){if(Array.isArray(G)){let[D,q,C]=G;p(D,"where(column)");let S=String(D);switch(q){case"in":if(Array.isArray(C)){let P=f0(C.length);return $.unsafe(`${S} IN (${P})`,C)}return $.unsafe(`${S} IN (${i(1)})`,[C]);case"not in":if(Array.isArray(C)){let P=f0(C.length);return $.unsafe(`${S} NOT IN (${P})`,C)}return $.unsafe(`${S} NOT IN (${i(1)})`,[C]);case"like":return $.unsafe(`${S} LIKE ${i(1)}`,[C]);case"is":case"is not":{if(C!==null&&C!==void 0)throw TypeError(`[query-builder] where(..., '${q}', ?): operator '${q}' only accepts NULL/undefined as value, got ${typeof C} (${String(C)})`);return $.unsafe(`${S} IS ${q==="is not"?"NOT ":""}NULL`)}case"!=":return $.unsafe(`${S} <> ${i(1)}`,[C]);case"<":case">":case"<=":case">=":case"=":return $.unsafe(`${S} ${q} ${i(1)}`,[C]);default:throw TypeError(`[query-builder] where(..., '${String(q)}', ?): unsupported operator. Allowed: =, !=, <>, <, <=, >, >=, like, in, not in, is, is not`)}}if("raw"in G)return G.raw;let J=Object.keys(G);if(J.length===0)return $.unsafe("");let V=[],F=[],R=1;for(let D of J){p(D,"where(object key)");let q=G[D];if(Array.isArray(q)){let C=f0(q.length,R);V.push(`${D} IN (${C})`),F.push(...q),R+=q.length}else V.push(`${D} = ${i(R++)}`),F.push(q)}return $.unsafe(V.join(" AND "),F)}function Q(G,J,V){if(!V)return J;let F=_(V);return $`${J} WHERE ${F}`}function L(G){let J=v.debug?.captureText;if(v.debug)v.debug.captureText=!0;let V=String(G);if(v.debug)v.debug.captureText=J;return V}function z(G){if(!G||typeof G!=="object")return;if(Array.isArray(G.values))return G.values;if(Array.isArray(G.parameters))return G.parameters;if(Array.isArray(G.params))return G.params;return}function j(G,J,V){let F=v.hooks,R=F?.slowQueryThresholdMs,D=R!=null&&R>=0,q=Boolean(F?.onSlowQuery||D),C=F&&(F.onQueryStart||F.onQueryEnd||F.onQueryError||F.startSpan||q),S=V?.timeoutMs&&V.timeoutMs>0||V?.signal;if(!C&&!S)return G.execute();let P=L(G),H=z(G),N=Date.now(),A;try{if(F?.onQueryStart?.({sql:P,params:H,kind:J}),F?.startSpan)A=F.startSpan({sql:P,params:H,kind:J})}catch{}let h=!1,d=(n,u)=>{if(h)return;h=!0;let m=Date.now()-N;try{if(n)F?.onQueryError?.({sql:P,params:H,error:n,durationMs:m,kind:J});else if(F?.onQueryEnd?.({sql:P,params:H,durationMs:m,rowCount:u,kind:J}),D&&m>=R)if(F?.onSlowQuery)F.onSlowQuery({sql:P,params:H,durationMs:m,kind:J});else console.warn(`[query-builder] slow query (${m}ms >= ${R}ms): ${P}`)}catch{}try{A?.end(n)}catch{}},b=G.execute(),l=[b],s;if(V?.timeoutMs&&V.timeoutMs>0){let n=new Promise((u,m)=>{s=setTimeout(()=>{try{G.cancel?.()}catch{}let X0=Error(`Query timed out after ${V.timeoutMs}ms`);X0.code="EBQBTIMEOUT",m(X0)},V.timeoutMs)});l.push(n)}if(V?.signal){if(V.signal.aborted){try{G.cancel?.()}catch{}let u=Error("Query aborted");return u.code="EBQBABORT",d(u),Promise.reject(u)}let n=()=>{try{G.cancel?.()}catch{}};V.signal.addEventListener("abort",n,{once:!0}),b.finally(()=>{V.signal?.removeEventListener("abort",n)})}return Promise.race(l).then((n)=>{clearTimeout(s);let u=Array.isArray(n)?n.length:typeof n==="number"?n:void 0;return d(void 0,u),n}).catch((n)=>{throw clearTimeout(s),d(n),n})}function E(G,J){let V=J??L(G);return{sql:V,toString:()=>V,execute:()=>G.execute(),values:()=>G.values(),raw:()=>G.raw()}}function W(G,J){let V=$,F=J&&J.length>0?`SELECT ${J.join(", ")} FROM ${String(G)}`:`SELECT * FROM ${String(G)}`,R=null,D=()=>{if(R===null){let O=Y$(F);R=y.length>0?$.unsafe(O,y):$.unsafe(O)}return R},q=(O,I)=>{let M=!r.WHERE.test(F)?"WHERE":O==="WHERE"?"AND":O;F=`${F} ${M} ${I}`},C=(O,I)=>{let K=I.__rawState?.();if(K){let M=y.length,w=v.dialect==="postgres"?K.sql.replace(/\$(\d+)/g,(T,k)=>`$${Number(k)+M}`):K.sql;F+=` ${O} ${w}`,y.push(...K.params)}else F+=` ${O} ${String(I.toSQL())}`;R=null},S=(O)=>{let I=/\(|\)|\b(?:WHERE|GROUP BY|HAVING|ORDER BY|LIMIT|OFFSET|UNION)\b/gi,K=0,M=-1,w;while(w=I.exec(F))if(w[0]==="(")K++;else if(w[0]===")")K=Math.max(0,K-1);else if(K===0){M=w.index;break}F=M>=0?`${F.slice(0,M)}${O} ${F.slice(M)}`:`${F} ${O}`,R=null},P=new Set,H,N,A=!1,h=!1,d=!1,b=new Map,l=new Set,s=60000,n=(O)=>zZ(v.relations.singularizeStrategy)(O),u=(O)=>{if(!Z)return null;return NX(Z,String(G),O,{singularize:n,models:Z.models})},m=(O)=>{if(!O||typeof O!=="object"||l.size===0)return O;let I;for(let K of Object.keys(O))if(K.startsWith("pivot_")){if(!I)I={};I[K.slice(6)]=O[K],delete O[K]}if(I)O.pivot=I;return O},X0=(O)=>{if(l.size===0||!O)return O;if(Array.isArray(O))for(let I=0;I<O.length;I++)m(O[I]);else m(O);return O},R0=(O)=>{if(!Z)return;if(P.has(O.pivotTable))return;let I=String(G),K=Z.primaryKeys[I]??"id";p(O.pivotTable,"wherePivot auto-join (pivot table)"),p(O.fkParent,"wherePivot auto-join (parent FK)"),p(I,"wherePivot auto-join (parent table)"),p(K,"wherePivot auto-join (parent PK)"),R=V`${D()} LEFT JOIN ${V(O.pivotTable)} ON ${V(`${O.pivotTable}.${O.fkParent}`)} = ${V(`${I}.${K}`)}`,F=`${F} LEFT JOIN ${O.pivotTable} ON ${O.pivotTable}.${O.fkParent} = ${I}.${K}`,P.add(O.pivotTable)},z0=[],y=[],J9=(O)=>{if(r.SELECT_STAR.test(F))F=F.replace(r.SELECT_STAR,`SELECT *, ${O}`);else if(r.SELECT.test(F))F=F.replace(r.SELECT_FROM,`SELECT $1, ${O} FROM`);let I=String(D());if(r.SELECT_STAR.test(I)){let K=I.replace(r.SELECT_STAR,`SELECT *, ${O}`);R=$.unsafe(K)}else if(r.SELECT.test(I)){if(r.SELECT_FROM.exec(I)){let M=I.replace(r.SELECT_FROM,`SELECT $1, ${O} FROM`);R=$.unsafe(M)}}},G0=(O,I,K,M)=>{J9(`${O} ${o_(K,M)} AS ${I}`)},QX=(O,I,K,M)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)");let w=`${O.endsWith("s")?O.slice(0,-1):O}_id`;p(w,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${w} = ${O}.${K}`;if(M){let x=M({where:(g,B,f)=>{return p(g,"relationship subquery condition"),`${I}.${g} ${g0(B,"whereHas callback")} ${P9(f)}`}});if(x)T+=` AND ${x}`}return T},f8=(O,I,K,M)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)");let w=`${I.endsWith("s")?I.slice(0,-1):I}_id`;p(w,"relationship subquery (foreign key)");let T=`SELECT 1 FROM ${I} WHERE ${I}.${K} = ${O}.${w}`;if(M){let x=M({where:(g,B,f)=>{return p(g,"relationship subquery condition"),`${I}.${g} ${g0(B,"whereHas callback")} ${P9(f)}`}});if(x)T+=` AND ${x}`}return T},g8=(O,I,K,M,w,T)=>{p(O,"relationship subquery (parent table)"),p(I,"relationship subquery (target table)"),p(K,"relationship subquery (primary key)"),p(M,"relationship subquery (target primary key)");let k=T&&Z?NX(Z,O,T,{singularize:n,models:Z.models}):null,x=n(O),g=n(I),B=k?.pivotTable??[x,g].sort().join("_"),f=k?.fkParent??`${x}_id`,o=k?.fkRelated??`${g}_id`;p(B,"relationship subquery (pivot table)"),p(f,"relationship subquery (foreign key A)"),p(o,"relationship subquery (foreign key B)");let $0=`SELECT 1 FROM ${B} JOIN ${I} ON ${I}.${M} = ${B}.${o} WHERE ${B}.${f} = ${O}.${K}`;if(w){let a=w({where:(A0,X9,_9)=>{return p(A0,"relationship subquery condition"),`${I}.${A0} ${g0(X9,"whereHas callback")} ${P9(_9)}`}});if(a)$0+=` AND ${a}`}return $0},p7=(O,I,K)=>{p(O,"withCount (parent table)"),p(I,"withCount (target table)"),p(K,"withCount (primary key)");let M=`${O.endsWith("s")?O.slice(0,-1):O}_id`;return p(M,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${I} WHERE ${I}.${M} = ${O}.${K})`},c7=(O,I,K,M)=>{p(O,"withCount (parent table)"),p(I,"withCount (target table)"),p(K,"withCount (primary key)");let w=M&&Z?NX(Z,O,M,{singularize:n,models:Z.models}):null,T=n(O),k=n(I),x=w?.pivotTable??[T,k].sort().join("_"),g=w?.fkParent??`${T}_id`;return p(x,"withCount (pivot table)"),p(g,"withCount (foreign key)"),`(SELECT COUNT(*) FROM ${x} WHERE ${x}.${g} = ${O}.${K})`},d8=(O,I,K)=>{if(!Z)return;p(K,`with${O[0]}${O.slice(1).toLowerCase()} (column)`);let M=String(G),w=Z.relations?.[M];if(!w)return;let T=Object.entries(w).find(([a,A0])=>A0&&typeof A0==="object"&&(I in A0));if(!T)return;let[k,x]=T,g=x[I],B=typeof g==="string"?g:g?.model||g?.target||g,f=Z.modelToTable[B]||B,o=Z.primaryKeys[M]??"id";p(f,`with${O} (target table)`);let $0=`${O}(${f}.${K})`,T0;if(k==="hasMany"||k==="hasOne"){let a=`${M.endsWith("s")?M.slice(0,-1):M}_id`;p(a,`with${O} (foreign key)`),T0=`(SELECT ${$0} FROM ${f} WHERE ${f}.${a} = ${M}.${o})`}else if(k==="belongsToMany"){let a=Z?NX(Z,M,I,{singularize:n,models:Z.models}):null,A0=n(M),X9=n(f),_9=a?.pivotTable??[A0,X9].sort().join("_"),zX=a?.fkParent??`${A0}_id`,_0=a?.fkRelated??`${X9}_id`,mX=Z.primaryKeys[f]??"id";p(_9,`with${O} (pivot table)`),p(zX,`with${O} (foreign key)`),p(_0,`with${O} (related key)`),T0=`(SELECT ${$0} FROM ${_9} JOIN ${f} ON ${f}.${mX} = ${_9}.${_0} WHERE ${_9}.${zX} = ${M}.${o})`}else return;J9(`${T0} AS ${I}_${O.toLowerCase()}_${K}`)},q5=()=>{if(b.size===0)return;let O=[];for(let[I,K]of b.entries()){let M=u(I);if(!M)continue;for(let T of K)p(T,"withPivot");let w=K.map((T)=>`${M.pivotTable}.${T} AS pivot_${T}`);O.push(...w)}if(O.length>0){let I=O.join(", ");J9(I)}};return new Proxy({distinct(){return F=F.replace(/^SELECT\s+/i,"SELECT DISTINCT "),R=null,this},distinctOn(...O){let I=O.map(String).join(", ");return F=F.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${I}) `),R=null,this},selectRaw(O){let I=DX(O,"selectRaw(fragment)"),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I}${F.substring(K)}`;else F+=`, ${I}`;return R=null,this},rowNumber(O="row_number",I,K){let M=[];if(I){let x=Array.isArray(I)?I:[I];M.push(`PARTITION BY ${x.join(", ")}`)}if(K&&K.length)M.push(`ORDER BY ${K.map(([x,g])=>`${x} ${g==="desc"?"DESC":"ASC"}`).join(", ")}`);let T=`ROW_NUMBER() ${M.length?`OVER (${M.join(" ")})`:"OVER ()"} AS ${O}`,k=F.indexOf(" FROM ");if(k!==-1)F=`${F.substring(0,k)}, ${T}${F.substring(k)}`;else F+=`, ${T}`;return R=null,this},denseRank(O="dense_rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],w=[];if(M.length)w.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)w.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`DENSE_RANK() ${w.length?`OVER (${w.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},rank(O="rank",I,K){let M=Array.isArray(I)?I:I?[I]:[],w=[];if(M.length)w.push(`PARTITION BY ${M.join(", ")}`);if(K&&K.length)w.push(`ORDER BY ${K.map(([g,B])=>`${g} ${B==="desc"?"DESC":"ASC"}`).join(", ")}`);let k=`RANK() ${w.length?`OVER (${w.join(" ")})`:"OVER ()"} AS ${O}`,x=F.indexOf(" FROM ");if(x!==-1)F=`${F.substring(0,x)}, ${k}${F.substring(x)}`;else F+=`, ${k}`;return R=null,this},over(O,I,K={}){return G0(O,I,K.partitionBy,K.orderBy),this},lag(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LAG(${K.join(", ")})`,I.alias??`${O}_lag`,I.partitionBy,I.orderBy),this},lead(O,I={}){let K=[O,String(I.offset??1)];if(I.defaultValue!==void 0)K.push(String(I.defaultValue));return G0(`LEAD(${K.join(", ")})`,I.alias??`${O}_lead`,I.partitionBy,I.orderBy),this},sumOver(O,I={}){return G0(`SUM(${O})`,I.alias??`${O}_sum`,I.partitionBy,I.orderBy),this},avgOver(O,I={}){return G0(`AVG(${O})`,I.alias??`${O}_avg`,I.partitionBy,I.orderBy),this},countOver(O="*",I={}){return G0(`COUNT(${O})`,I.alias??"count_over",I.partitionBy,I.orderBy),this},minOver(O,I={}){return G0(`MIN(${O})`,I.alias??`${O}_min`,I.partitionBy,I.orderBy),this},maxOver(O,I={}){return G0(`MAX(${O})`,I.alias??`${O}_max`,I.partitionBy,I.orderBy),this},firstValue(O,I={}){return G0(`FIRST_VALUE(${O})`,I.alias??`${O}_first`,I.partitionBy,I.orderBy),this},lastValue(O,I={}){return G0(`LAST_VALUE(${O})`,I.alias??`${O}_last`,I.partitionBy,I.orderBy),this},selectAll(){return this},select(O){if(!O)return this;let I=Array.isArray(O)?O:[O];if(I.length===0)return this;let K=I.map(hY),M=/^SELECT\s+(DISTINCT(?:\s+ON\s+\([^)]*\))?\s+)/i.exec(F),w=M?M[1]:"",T=F.indexOf(" FROM ");if(T!==-1)F=`SELECT ${w}${K.join(", ")}${F.substring(T)}`;else F=`SELECT ${w}${K.join(", ")} FROM ${G}`;return R=null,this},addSelect(...O){if(!O.length)return this;let I=O.map(hY),K=F.indexOf(" FROM ");if(K!==-1)F=`${F.substring(0,K)}, ${I.join(", ")}${F.substring(K)}`;else F+=`, ${I.join(", ")}`;return R=null,this},with(...O){if(!Z||!O||O.length===0)return this;let I=[];for(let B of O){if(!B)continue;if(typeof B==="string")I.push({name:B});else if(typeof B==="object"&&!Array.isArray(B))for(let[f,o]of Object.entries(B))if(typeof o==="function")I.push({name:f,callback:o});else I.push({name:f})}if(I.length===0)return this;let K=v.relations.maxEagerLoad??50;if(I.length>K)throw Error(`[query-builder] Too many relationships to eager load (${I.length}). Maximum allowed: ${K}`);let M=String(G),w=new Set,T=new Set,k=new Map,x=(B)=>{let f=Z.relations?.[B];if(!f)return[];return[...Object.keys(f.hasOne||{}),...Object.keys(f.hasMany||{}),...Object.keys(f.belongsTo||{}),...Object.keys(f.belongsToMany||{}),...Object.keys(f.hasOneThrough||{}),...Object.keys(f.hasManyThrough||{}),...Object.keys(f.morphOne||{}),...Object.keys(f.morphMany||{}),...Object.keys(f.morphToMany||{}),...Object.keys(f.morphedByMany||{})]},g=(B,f,o=0,$0)=>{let T0=v.relations.maxDepth??10;if(o>=T0)throw Error(`[query-builder] Maximum relationship depth (${T0}) exceeded at '${f}'. Consider using separate queries or increasing maxDepth.`);let a=Z.relations?.[B];if(!a)return B;let A0=(Z0)=>{if(v.softDeletes?.enabled&&v.softDeletes?.defaultFilter){let Y0=v.softDeletes.column||"deleted_at";return` AND ${Z0}.${Y0} IS NULL`}return""},X9=(Z0)=>{if(!$0)return"";let Y0=[],q0=(L0,a0,K9)=>{p(String(L0),"with() constraint column");let LX=g0(a0,"with() constraint operator");Y0.push(`${Z0}.${String(L0)} ${LX} ${P9(K9)}`)},K0=(L0)=>()=>{throw Error(`[query-builder] with('${f}', ...): ${L0} is not supported inside a constraint callback on the JOIN-based builder \u2014 apply it to the outer query, or use the model layer's eager loading. (Silently ignoring it would return wrong data.)`)},N0={where:(L0,a0,K9)=>{if(Array.isArray(L0))q0(L0[0],L0[1],L0[2]);else if(L0&&typeof L0==="object")for(let LX of Object.keys(L0))q0(LX,"=",L0[LX]);else if(a0!==void 0&&K9!==void 0)q0(L0,a0,K9);else if(a0!==void 0)q0(L0,"=",a0);return N0},whereIn:(L0,a0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IN (${a0.map(P9).join(", ")})`),N0},whereNull:(L0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NULL`),N0},whereNotNull:(L0)=>{return p(String(L0),"with() constraint column"),Y0.push(`${Z0}.${String(L0)} IS NOT NULL`),N0},orderBy:K0("orderBy()"),limit:K0("limit()"),offset:K0("offset()"),take:K0("take()")};return $0(N0),Y0.length?` AND ${Y0.join(" AND ")}`:""},_9=()=>{let Z0=(K0)=>{let N0=K0?.[f];return N0?Z.modelToTable[N0]:void 0},Y0=(K0)=>{let N0=K0?.[f],L0=typeof N0==="string"?N0:N0?.model;return L0?Z.modelToTable[L0]:void 0},q0=(K0)=>{let N0=K0?.[f];return N0?.target?Z.modelToTable[N0.target]:void 0};return Z0(a?.hasOne)||Z0(a?.hasMany)||Z0(a?.belongsTo)||Y0(a?.belongsToMany)||q0(a?.hasOneThrough)||q0(a?.hasManyThrough)||Z0(a?.morphOne)||Z0(a?.morphMany)||Z0(a?.morphToMany)||Z0(a?.morphedByMany)},zX=_9()??(Z.modelToTable[f]||Z.tableToModel[f]?Z.modelToTable[f]??f:f),_0=String(zX);if(!zX||!_9()&&!Z.modelToTable[f]&&!Z.tableToModel[f]){let Z0=x(B);if(Z0.length>0&&!Z0.includes(f)){let Y0=` Available relationships: ${Z0.join(", ")}`;throw Error(`[query-builder] Relationship '${f}' not found on table '${B}'.${Y0}`)}}if(v.relations.detectCycles!==!1){let Z0=`${B}->${_0}`;if(w.has(Z0))throw Error(`[query-builder] Circular relationship detected: ${Z0}. This would cause an infinite loop.`);w.add(Z0)}if(!_0||_0===B)return B;let mX=a?.hasOneThrough?.[f]||a?.hasManyThrough?.[f];if(mX){let{through:Z0,target:Y0}=mX,q0=Z.modelToTable[Z0]||Z0,K0=Z.modelToTable[Y0]||Y0,N0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[q0]??"id",a0=`${n(B)}_id`,K9=`${n(q0)}_id`;return S(`LEFT JOIN ${q0} ON ${q0}.${a0} = ${B}.${N0} LEFT JOIN ${K0} ON ${K0}.${K9} = ${q0}.${L0}`),P.add(q0),P.add(K0),K0}if(Boolean(a?.belongsToMany?.[f])){let Z0=NX(Z,B,f,{singularize:n,models:Z.models}),Y0=Z0?.pivotTable??[n(B),n(_0)].sort().join("_"),q0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",N0=Z0?.fkParent??`${n(B)}_id`,L0=Z0?.fkRelated??`${n(_0)}_id`;return S(`LEFT JOIN ${Y0} ON ${Y0}.${N0} = ${B}.${q0} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${L0}${X9(_0)}`),P.add(Y0),P.add(_0),_0}if(Boolean(a?.morphToMany?.[f])){let Z0=f,Y0=`${n(_0)}_${Z0}`,q0=Z.primaryKeys[B]??"id",K0=Z.primaryKeys[_0]??"id",N0=`${Z0}_type`,L0=`${Z0}_id`,a0=`${n(_0)}_id`,K9=P9(Z.tableToModel[B]||B);return S(`LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${B}.${q0} AND ${Y0}.${N0} = ${K9} LEFT JOIN ${_0} ON ${_0}.${K0} = ${Y0}.${a0}`),P.add(Y0),P.add(_0),_0}if(Boolean(a?.morphedByMany?.[f])){let Z0=a.morphedByMany?.[f]||f,Y0=Z.modelToTable[Z0]||Z0,q0=n(B),K0=`${n(Y0)}_${q0}`,N0=Z.primaryKeys[B]??"id",L0=Z.primaryKeys[Y0]??"id",a0=`${q0}_type`,K9=`${q0}_id`,LX=`${n(Y0)}_id`,s7=P9(Z.tableToModel[Y0]||Y0);return S(`LEFT JOIN ${K0} ON ${K0}.${LX} = ${B}.${N0} LEFT JOIN ${Y0} ON ${Y0}.${L0} = ${K0}.${K9} AND ${K0}.${a0} = ${s7}`),P.add(K0),P.add(Y0),Y0}if(Boolean(a?.belongsTo?.[f])){let Z0=`${n(_0)}_id`,Y0=Z.primaryKeys[_0]??"id";return S(`LEFT JOIN ${_0} ON ${B}.${Z0} = ${_0}.${Y0}${X9(_0)}`),P.add(_0),_0}let m7=Boolean(a?.morphOne?.[f]),u7=Boolean(a?.morphMany?.[f]);if(m7||u7){let Z0=`${f}_type`,Y0=`${f}_id`,q0=Z.primaryKeys[B]??"id",K0=P9(Z.tableToModel[B]||B);return S(`LEFT JOIN ${_0} ON ${_0}.${Y0} = ${B}.${q0} AND ${_0}.${Z0} = ${K0}`),P.add(_0),_0}let n7=`${n(B)}_id`,i7=Z.primaryKeys[B]??"id",l7=`${A0(_0)}${X9(_0)}`;return S(`LEFT JOIN ${_0} ON ${_0}.${n7} = ${B}.${i7}${l7}`),P.add(_0),_0};for(let B of I){let f=B.name.trim();if(B.callback)k.set(f,B.callback);let o=f.split("."),$0=M,T0=0;for(let a of o){if(!a||a.trim().length===0)continue;let A0=a.trim(),X9=k.get(A0);$0=g($0,A0,T0,X9)||$0,T0++}T.add(f)}if(b.size>0){let B=[];for(let[f,o]of b.entries()){let $0=u(f);if(!$0)continue;let T0=o.map((a)=>`${$0.pivotTable}.${a} AS pivot_${a}`);B.push(...T0)}if(B.length>0){let f=B.join(", ");J9(f)}}return R=null,this},whereHas(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let w=Object.entries(M).find(([o,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!w)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=w,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,f;if(T==="hasMany"||T==="hasOne"){let o=Z.primaryKeys[K]??"id";f=QX(K,B,o,I)}else if(T==="belongsTo"){let o=Z.primaryKeys[B]??"id";f=f8(K,B,o,I)}else if(T==="belongsToMany"){let o=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";f=g8(K,B,o,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereHas`);R=V`${D()} WHERE EXISTS (${V([f])})`;try{q("WHERE",`EXISTS (${f})`)}catch{}return this},whereDoesntHave(O,I){if(!Z)return this;let K=String(G),M=Z.relations?.[K];if(!M)throw Error(`[query-builder] No relationships defined for table '${K}'`);let w=Object.entries(M).find(([o,$0])=>$0&&typeof $0==="object"&&(O in $0));if(!w)throw Error(`[query-builder] Relationship '${O}' not found on table '${K}'`);let[T,k]=w,x=k[O],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,f;if(T==="hasMany"||T==="hasOne"){let o=Z.primaryKeys[K]??"id";f=QX(K,B,o,I)}else if(T==="belongsTo"){let o=Z.primaryKeys[B]??"id";f=f8(K,B,o,I)}else if(T==="belongsToMany"){let o=Z.primaryKeys[K]??"id",$0=Z.primaryKeys[B]??"id";f=g8(K,B,o,$0,I,O)}else throw Error(`[query-builder] Unsupported relationship type '${T}' for whereDoesntHave`);R=V`${D()} WHERE NOT EXISTS (${V([f])})`;try{q("WHERE",`NOT EXISTS (${f})`)}catch{}return this},has(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([f,o])=>o&&typeof o==="object"&&(O in o));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[w,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(w==="hasMany"||w==="hasOne"){let f=Z.primaryKeys[I]??"id";B=QX(I,g,f)}else if(w==="belongsTo"){let f=Z.primaryKeys[g]??"id";B=f8(I,g,f)}else if(w==="belongsToMany"){let f=Z.primaryKeys[I]??"id",o=Z.primaryKeys[g]??"id";B=g8(I,g,f,o,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${w}' for has`);R=V`${D()} WHERE EXISTS (${V([B])})`;try{q("WHERE",`EXISTS (${B})`)}catch{}return this},doesntHave(O){if(!Z)return this;let I=String(G),K=Z.relations?.[I];if(!K)throw Error(`[query-builder] No relationships defined for table '${I}'`);let M=Object.entries(K).find(([f,o])=>o&&typeof o==="object"&&(O in o));if(!M)throw Error(`[query-builder] Relationship '${O}' not found on table '${I}'`);let[w,T]=M,k=T[O],x=typeof k==="string"?k:k?.model||k?.target||k,g=Z.modelToTable[x]||x,B;if(w==="hasMany"||w==="hasOne"){let f=Z.primaryKeys[I]??"id";B=QX(I,g,f)}else if(w==="belongsTo"){let f=Z.primaryKeys[g]??"id";B=f8(I,g,f)}else if(w==="belongsToMany"){let f=Z.primaryKeys[I]??"id",o=Z.primaryKeys[g]??"id";B=g8(I,g,f,o,void 0,O)}else throw Error(`[query-builder] Unsupported relationship type '${w}' for doesntHave`);R=V`${D()} WHERE NOT EXISTS (${V([B])})`;try{q("WHERE",`NOT EXISTS (${B})`)}catch{}return this},withCount(...O){if(!Z||!O||O.length===0)return this;let I=String(G);for(let K of O){let M=Z.relations?.[I];if(!M)continue;let w=Object.entries(M).find(([T0,a])=>a&&typeof a==="object"&&(K in a));if(!w)continue;let[T,k]=w,x=k[K],g=typeof x==="string"?x:x?.model||x?.target||x,B=Z.modelToTable[g]||g,f=Z.primaryKeys[I]??"id",o;if(T==="hasMany"||T==="hasOne")o=p7(I,B,f);else if(T==="belongsToMany")o=c7(I,B,f,K);else continue;let $0=`${K}_count`;J9(`${o} AS ${$0}`)}return this},withSum(O,I){return d8("SUM",O,I),this},withAvg(O,I){return d8("AVG",O,I),this},withMax(O,I){return d8("MAX",O,I),this},withMin(O,I){return d8("MIN",O,I),this},applyPivotColumns(){return q5(),this},withPivot(O,...I){if(!Z)return this;let K=String(G),M=u(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${K}'`);let w=I&&I.length>0?I:M.hasConfig?M.pivotColumns:[];if(w.length===0)return this;if(b.set(O,w),M.hasConfig)l.add(O);return q5(),this},wherePivot(O,I,K,M){if(!Z)return this;let w=u(O);if(!w)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(w.pivotTable,"wherePivot (pivot table)"),p(I,"wherePivot (column)"),R0(w);let T=M===void 0?"=":String(K),k=M===void 0?K:M,x=y.length+1,g=`${w.pivotTable}.${I} ${T} ${i(x)}`;z0.push(g),y.push(k);let B=r.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${B} ${g}`,R=null,w.hasConfig)l.add(O);return this},wherePivotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=u(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(M.pivotTable,"wherePivotIn (pivot table)"),p(I,"wherePivotIn (column)"),R0(M);let w=f0(K.length,y.length+1),T=`${M.pivotTable}.${I} IN (${w})`;z0.push(T),y.push(...K);let k=r.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)l.add(O);return this},wherePivotNotIn(O,I,K){if(!Z||!Array.isArray(K)||K.length===0)return this;let M=u(O);if(!M)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(M.pivotTable,"wherePivotNotIn (pivot table)"),p(I,"wherePivotNotIn (column)"),R0(M);let w=f0(K.length,y.length+1),T=`${M.pivotTable}.${I} NOT IN (${w})`;z0.push(T),y.push(...K);let k=r.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${k} ${T}`,R=null,M.hasConfig)l.add(O);return this},wherePivotNull(O,I){if(!Z)return this;let K=u(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(K.pivotTable,"wherePivotNull (pivot table)"),p(I,"wherePivotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NULL`;z0.push(M);let w=r.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${w} ${M}`,R=null,K.hasConfig)l.add(O);return this},wherePivotNotNull(O,I){if(!Z)return this;let K=u(O);if(!K)throw Error(`[query-builder] Relationship '${O}' is not a belongsToMany relationship on table '${String(G)}'`);p(K.pivotTable,"wherePivotNotNull (pivot table)"),p(I,"wherePivotNotNull (column)"),R0(K);let M=`${K.pivotTable}.${I} IS NOT NULL`;z0.push(M);let w=r.WHERE.test(F)?"AND":"WHERE";if(F=`${F} ${w} ${M}`,R=null,K.hasConfig)l.add(O);return this},where(O,I,K){let M=()=>r.WHERE.test(F)?"AND":"WHERE";if(typeof O==="string"&&I!==void 0){p(String(O),"where(column)"),g0(I,"where(operator)");let w=String(I).toLowerCase();if(w==="in"||w==="not in"){let k=Array.isArray(K)?K:[K],x=f0(k.length,y.length+1),g=`${String(O)} ${w.toUpperCase()} (${x})`;return z0.push(g),y.push(...k),F=`${F} ${M()} ${g}`,R=null,this}let T=y.length+1;return z0.push(`${String(O)} ${String(I)} ${i(T)}`),y.push(K),F=`${F} ${M()} ${String(O)} ${String(I)} ${i(T)}`,R=null,this}if(Array.isArray(O)){let[w,T,k]=O,x=String(w);p(x,"where(column)");let g=g0(T,"where(operator)");if(g==="in"||g==="not in"){let B=Array.isArray(k)?k:[k],f=f0(B.length,y.length+1);z0.push(`${x} ${g.toUpperCase()} (${f})`),y.push(...B),F=`${F} ${M()} ${x} ${g.toUpperCase()} (${f})`,R=null}else{let B=y.length+1;z0.push(`${x} ${g} ${i(B)}`),y.push(k),F=`${F} ${M()} ${x} ${g} ${i(B)}`,R=null}return this}if(O&&typeof O==="object"&&!m$(O)){let w=O,T=Object.keys(w),k=[];for(let x of T){p(x,"where(column)");let g=w[x];if(Array.isArray(g)){let B=f0(g.length,y.length+1);k.push(`${x} IN (${B})`),z0.push(`${x} IN (${B})`),y.push(...g)}else{let B=y.length+1;k.push(`${x} = ${i(B)}`),z0.push(`${x} = ${i(B)}`),y.push(g)}}if(k.length>0)F=`${F} ${M()} ${k.join(" AND ")}`,R=null;return this}if(m$(O))return z0.push(O.raw),F=`${F} ${M()} ${O.raw}`,R=null,this;return this},whereNull(O){p(String(O),"whereNull(column)");let I=r.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NULL`,R=null,this},whereNotNull(O){p(String(O),"whereNotNull(column)");let I=r.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} ${String(O)} IS NOT NULL`,R=null,this},whereBetween(O,I,K){p(String(O),"whereBetween(column)");let M=r.WHERE.test(F)?"AND":"WHERE",w=y.length+1;return F=`${F} ${M} ${String(O)} BETWEEN ${i(w)} AND ${i(w+1)}`,y.push(I,K),R=null,this},whereExists(O){let I=r.WHERE.test(F)?"AND":"WHERE";return F=`${F} ${I} EXISTS (${O.toSQL()})`,R=null,this},whereJsonContains(O,I){p(String(O),"whereJsonContains(column)");let K=r.WHERE.test(F)?"AND":"WHERE",M=v.dialect,w=y.length+1;if(M==="postgres"){if(v.sql?.jsonContainsMode==="function")F+=` ${K} jsonb_contains(${O}, ${i(w)})`;else F+=` ${K} ${O} @> ${i(w)}`;y.push(JSON.stringify(I))}else if(I0(M))F+=` ${K} JSON_CONTAINS(${O}, ${i(w)})`,y.push(JSON.stringify(I));else if(Array.isArray(I)){let T=I.map((k,x)=>`EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${i(w+x)})`);F+=` ${K} (${T.join(" AND ")})`;for(let k of I)y.push(k)}else if(I!==null&&typeof I==="object")throw Error("[query-builder] whereJsonContains: object containment is not supported on SQLite \u2014 pass a scalar or array, or use whereJsonPath.");else F+=` ${K} EXISTS (SELECT 1 FROM json_each(${O}) WHERE json_each.value = ${i(w)})`,y.push(I);return R=null,this},whereJsonPath(O,I,K){if(g0(I,"whereJsonPath(op)"),typeof O!=="string"||O.length===0||O.length>256)throw TypeError(`[query-builder] whereJsonPath(path): expected non-empty string up to 256 chars, got ${typeof O==="string"?`'${O.slice(0,32)}...'`:typeof O}`);if(!/^[A-Za-z0-9_.[\]$'\->* ,]+$/.test(O))throw TypeError(`[query-builder] whereJsonPath(path): refusing to use '${O}' \u2014 contains characters outside the allowed JSON-path set`);let M=v.dialect,w=r.WHERE.test(F)?"AND":"WHERE",T=y.length+1;if(M==="postgres")F+=` ${w} ${O} ${I} ${i(T)}`;else if(I0(M))F+=` ${w} JSON_EXTRACT(${O}) ${I} ${i(T)}`;else F+=` ${w} json_extract(${O}) ${I} ${i(T)}`;return y.push(K),R=null,this},whereLike(O,I,K=!1){let M=i(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereILike(O,I){let K=i(y.length+1);if(v.dialect==="postgres")q("WHERE",`${String(O)} ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereLike(O,I,K=!1){let M=i(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereILike(O,I){let K=i(y.length+1);if(v.dialect==="postgres")q("OR",`${String(O)} ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) LIKE LOWER(${K})`);return y.push(I),R=null,this},whereNotLike(O,I,K=!1){let M=i(y.length+1);return q("WHERE",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},whereNotILike(O,I){let K=i(y.length+1);if(v.dialect==="postgres")q("WHERE",`${String(O)} NOT ILIKE ${K}`);else q("WHERE",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},orWhereNotLike(O,I,K=!1){let M=i(y.length+1);return q("OR",`${K?String(O):`LOWER(${String(O)})`} NOT LIKE ${K?M:`LOWER(${M})`}`),y.push(I),R=null,this},orWhereNotILike(O,I){let K=i(y.length+1);if(v.dialect==="postgres")q("OR",`${String(O)} NOT ILIKE ${K}`);else q("OR",`LOWER(${String(O)}) NOT LIKE LOWER(${K})`);return y.push(I),R=null,this},whereAny(O,I,K){if(O.length===0)return this;let M=r.WHERE.test(F)?"AND":"WHERE",w=y.length+1,T=O.map((k,x)=>`${k} ${I} ${i(w+x)}`);F+=` ${M} (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereAll(O,I,K){if(O.length===0)return this;let M=r.WHERE.test(F)?"AND":"WHERE",w=y.length+1,T=O.map((k,x)=>`${k} ${I} ${i(w+x)}`);F+=` ${M} (${T.join(" AND ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNone(O,I,K){if(O.length===0)return this;let M=r.WHERE.test(F)?"AND":"WHERE",w=y.length+1,T=O.map((k,x)=>`${k} ${I} ${i(w+x)}`);F+=` ${M} NOT (${T.join(" OR ")})`;for(let k=0;k<O.length;k++)y.push(K);return R=null,this},whereNotBetween(O,I,K){p(String(O),"whereNotBetween(column)");let M=r.WHERE.test(F)?"AND":"WHERE",w=y.length+1;return F+=` ${M} ${O} NOT BETWEEN ${i(w)} AND ${i(w+1)}`,y.push(I,K),R=null,this},whereDate(O,I,K){p(O,"whereDate(column)");let M=K instanceof Date?K.toISOString():typeof K==="string"?K:(()=>{throw TypeError(`[query-builder] whereDate(date): expected string or Date, got ${typeof K}`)})(),w=r.WHERE.test(F)?"AND":"WHERE",T=y.length+1;return F+=` ${w} ${O} ${I} ${i(T)}`,y.push(M),R=null,this},whereRaw(O){let I=DX(O,"whereRaw(fragment)"),K=r.WHERE.test(F)?"AND":"WHERE";return F+=` ${K} ${I}`,R=null,this},whereColumn(O,I,K){p(O,"whereColumn(left)"),p(K,"whereColumn(right)");let M=r.WHERE.test(F)?"AND":"WHERE";return F+=` ${M} ${O} ${I} ${K}`,R=null,this},orWhereColumn(O,I,K){return p(O,"orWhereColumn(left)"),p(K,"orWhereColumn(right)"),F+=` OR ${O} ${I} ${K}`,R=null,this},whereIn(O,I){p(String(O),"whereIn(column)");let K=r.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=f0(I.length,y.length+1);F+=` ${K} ${O} IN (${M})`,y.push(...I)}else F+=` ${K} ${O} IN (${String(I.toSQL())})`;return R=null,this},orWhereIn(O,I){if(p(String(O),"orWhereIn(column)"),Array.isArray(I)){let K=f0(I.length,y.length+1);F+=` OR ${O} IN (${K})`,y.push(...I)}else F+=` OR ${O} IN (${String(I.toSQL())})`;return R=null,this},whereNotIn(O,I){p(String(O),"whereNotIn(column)");let K=r.WHERE.test(F)?"AND":"WHERE";if(Array.isArray(I)){let M=f0(I.length,y.length+1);F+=` ${K} ${O} NOT IN (${M})`,y.push(...I)}else F+=` ${K} ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},orWhereNotIn(O,I){if(p(String(O),"orWhereNotIn(column)"),Array.isArray(I)){let K=f0(I.length,y.length+1);F+=` OR ${O} NOT IN (${K})`,y.push(...I)}else F+=` OR ${O} NOT IN (${String(I.toSQL())})`;return R=null,this},whereNested(O){let I=r.WHERE.test(F)?"AND":"WHERE",K=O.toSQL?String(O.toSQL()):String(O);return F+=` ${I} (${K})`,R=null,this},orWhereNested(O){let I=O.toSQL?String(O.toSQL()):String(O);return F+=` OR (${I})`,R=null,this},andWhere(O,I,K){if(typeof O==="string"&&I!==void 0){p(String(O),"andWhere(column)"),g0(I,"andWhere(operator)");let M=y.length+1;return z0.push(`${String(O)} ${String(I)} ${i(M)}`),y.push(K),F=`${F} AND ${String(O)} ${String(I)} ${i(M)}`,R=null,this}if(Array.isArray(O)){let[M,w,T]=O,k=String(M);p(k,"andWhere(column)");let x=g0(w,"andWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=f0(g.length,y.length+1);z0.push(`${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} AND ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`${k} ${x} ${i(g)}`),y.push(T),F=`${F} AND ${k} ${x} ${i(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),w=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=f0(k.length,y.length+1);w.push(`${T} IN (${x})`),z0.push(`${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;w.push(`${T} = ${i(x)}`),z0.push(`${T} = ${i(x)}`),y.push(k)}}if(w.length>0)F=`${F} AND ${w.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(O.raw),F=`${F} AND ${O.raw}`,R=null,this;return this},orWhere(O,I,K){if(typeof O==="string"&&I!==void 0){p(String(O),"orWhere(column)"),g0(I,"orWhere(operator)");let M=y.length+1;return z0.push(`OR ${String(O)} ${String(I)} ${i(M)}`),y.push(K),F=`${F} OR ${String(O)} ${String(I)} ${i(M)}`,R=null,this}if(Array.isArray(O)){let[M,w,T]=O,k=String(M);p(k,"orWhere(column)");let x=g0(w,"orWhere(operator)");if(x==="in"||x==="not in"){let g=Array.isArray(T)?T:[T],B=f0(g.length,y.length+1);z0.push(`OR ${k} ${x.toUpperCase()} (${B})`),y.push(...g),F=`${F} OR ${k} ${x.toUpperCase()} (${B})`,R=null}else{let g=y.length+1;z0.push(`OR ${k} ${x} ${i(g)}`),y.push(T),F=`${F} OR ${k} ${x} ${i(g)}`,R=null}return this}if(O&&typeof O==="object"&&!("raw"in O)){let M=Object.keys(O),w=[];for(let T of M){let k=O[T];if(Array.isArray(k)){let x=f0(k.length,y.length+1);w.push(`${T} IN (${x})`),z0.push(`OR ${T} IN (${x})`),y.push(...k)}else{let x=y.length+1;w.push(`${T} = ${i(x)}`),z0.push(`OR ${T} = ${i(x)}`),y.push(k)}}if(w.length>0)F=`${F} OR ${w.join(" AND ")}`,R=null;return this}if(O&&typeof O.raw<"u")return z0.push(`OR ${O.raw}`),F=`${F} OR ${O.raw}`,R=null,this;return this},orderBy(O,I="asc"){let K=I==="asc"?"ASC":"DESC";return F=r.ORDER_BY.test(F)?`${F}, ${O} ${K}`:`${F} ORDER BY ${O} ${K}`,R=null,this},orderByDesc(O){return F=r.ORDER_BY.test(F)?`${F}, ${O} DESC`:`${F} ORDER BY ${O} DESC`,R=null,this},inRandomOrder(){let O=v.sql.randomFunction==="RAND()"?"RAND()":"RANDOM()";return F=r.ORDER_BY.test(F)?`${F}, ${O}`:`${F} ORDER BY ${O}`,R=null,this},reorder(O,I="asc"){return F=F.replace(/ORDER BY[\s\S]*$/i,""),F+=` ORDER BY ${O} ${I==="asc"?"ASC":"DESC"}`,R=null,this},latest(O){let I=O??v.timestamps.defaultOrderColumn;return F=r.ORDER_BY.test(F)?`${F}, ${I} DESC`:`${F} ORDER BY ${I} DESC`,R=null,this},oldest(O){let I=O??v.timestamps.defaultOrderColumn;return F=r.ORDER_BY.test(F)?`${F}, ${I} ASC`:`${F} ORDER BY ${I} ASC`,R=null,this},limit(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${O}`);return F=r.LIMIT.test(F)?F.replace(r.LIMIT,` LIMIT ${O}`):`${F} LIMIT ${O}`,R=null,this},offset(O){if(!Number.isFinite(O)||O<0||!Number.isInteger(O))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${O}`);return F=r.OFFSET.test(F)?F.replace(r.OFFSET,` OFFSET ${O}`):`${F} OFFSET ${O}`,R=null,this},join(O,I,K,M){return p(O,"join(table)"),Q9(I,"join(onLeft)"),Q9(M,"join(onRight)"),g0(K,"join(operator)"),S(`JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},joinSub(O,I,K,M,w){return p(I,"joinSub(alias)"),Q9(K,"joinSub(onLeft)"),Q9(w,"joinSub(onRight)"),g0(M,"joinSub(operator)"),S(`JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${w}`),P.add(I),this},innerJoin(O,I,K,M){return p(O,"innerJoin(table)"),Q9(I,"innerJoin(onLeft)"),Q9(M,"innerJoin(onRight)"),g0(K,"innerJoin(operator)"),S(`INNER JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoin(O,I,K,M){return p(O,"leftJoin(table)"),Q9(I,"leftJoin(onLeft)"),Q9(M,"leftJoin(onRight)"),g0(K,"leftJoin(operator)"),S(`LEFT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},leftJoinSub(O,I,K,M,w){return p(I,"leftJoinSub(alias)"),Q9(K,"leftJoinSub(onLeft)"),Q9(w,"leftJoinSub(onRight)"),g0(M,"leftJoinSub(operator)"),S(`LEFT JOIN (${String(O.toSQL())}) AS ${I} ON ${K} ${M} ${w}`),P.add(I),this},rightJoin(O,I,K,M){return p(O,"rightJoin(table)"),Q9(I,"rightJoin(onLeft)"),Q9(M,"rightJoin(onRight)"),g0(K,"rightJoin(operator)"),S(`RIGHT JOIN ${O} ON ${I} ${K} ${M}`),P.add(O),this},crossJoin(O){return p(O,"crossJoin(table)"),S(`CROSS JOIN ${O}`),P.add(O),this},crossJoinSub(O,I){return p(I,"crossJoinSub(alias)"),S(`CROSS JOIN (${String(O.toSQL())}) AS ${I}`),P.add(I),this},selectAllRelations(){if(!Y)return this;let O=String(G),I=Object.keys(Y[O]?.columns??{}),K=[];if(I.length>0)K.push(V`${V(O)}.*`);for(let M of P){let w=Object.keys(Y[M]?.columns??{});for(let T of w){let k=v.aliasing.relationColumnAliasFormat==="camelCase"?`${M}_${T}`.replace(/_([a-z])/g,(x,g)=>g.toUpperCase()):v.aliasing.relationColumnAliasFormat==="table.dot.column"?`${M}.${T}`:`${M}_${T}`;K.push(V`${V(`${M}.${T}`)} AS ${V(k)}`)}}if(K.length>0){let M=I.length>0?`${O}.*`:"",w=[];for(let x of P){let g=Object.keys(Y[x]?.columns??{});for(let B of g){let f=v.aliasing.relationColumnAliasFormat==="camelCase"?`${x}_${B}`.replace(/_([a-z])/g,(o,$0)=>$0.toUpperCase()):v.aliasing.relationColumnAliasFormat==="table.dot.column"?`${x}.${B}`:`${x}_${B}`;w.push(`${x}.${B} AS ${f}`)}}let T=[M,...w].filter(Boolean).join(", "),k=F.indexOf(" FROM ");if(k!==-1)F=`SELECT ${T}${F.substring(k)}`;else F=`SELECT ${T} FROM ${O}`;R=null}return this},groupBy(...O){if(O.length)F=r.GROUP_BY.test(F)?`${F}, ${O.join(", ")}`:`${F} GROUP BY ${O.join(", ")}`,R=null;return this},groupByRaw(O){let I=DX(O,"groupByRaw(fragment)");return F=r.GROUP_BY.test(F)?`${F}, ${I}`:`${F} GROUP BY ${I}`,R=null,this},having(O){let I=/\bHAVING\b/i.test(F)?"AND":"HAVING";if(Array.isArray(O)){let K=y.length+1;F=`${F} ${I} ${O[0]} ${O[1]} ${i(K)}`,y.push(O[2]),R=null}else if(O&&typeof O==="object"&&!("raw"in O)){let K=Object.keys(O),M=K.length;if(M){let w=y.length,T=Array.from({length:M});for(let k=0;k<M;k++){let x=K[k];T[k]=`${x} = ${i(w+k+1)}`,y.push(O[x])}F=`${F} ${I} ${T.join(" AND ")}`,R=null}}else if(O&&typeof O.raw<"u")F+=` ${I} ${O.raw}`,R=null;return this},havingRaw(O){let I=DX(O,"havingRaw(fragment)"),K=/\bHAVING\b/i.test(F)?"AND":"HAVING";return F+=` ${K} ${I}`,R=null,this},orderByRaw(O){let I=DX(O,"orderByRaw(fragment)");return F=r.ORDER_BY.test(F)?`${F}, ${I}`:`${F} ORDER BY ${I}`,R=null,this},union(O){return C("UNION",O),this},unionAll(O){return C("UNION ALL",O),this},intersect(O){return C("INTERSECT",O),this},intersectAll(O){return C("INTERSECT ALL",O),this},except(O){return C("EXCEPT",O),this},exceptAll(O){return C("EXCEPT ALL",O),this},forPage(O,I){let K=Math.max(1,Math.floor(O)),M=Math.max(1,Math.floor(I));return F+=` LIMIT ${M} OFFSET ${(K-1)*M}`,R=null,this},toSQL(){let O=Y$(F);return{sql:O,toString:()=>O,execute:()=>D().execute(),values:()=>D().values(),raw:()=>D().raw()}},async value(O){let I=V`${D()} LIMIT 1`,K=await j(I,"select",{signal:N,timeoutMs:H}),[M]=K;return M?.[O]},async pluck(O,I){let K=await j(D(),"select",{signal:N,timeoutMs:H});if(I){let M={};for(let w of K){let T=String(w?.[I]);if(Object.prototype.hasOwnProperty.call(M,T))throw Error(`[query-builder] pluck(${O}, ${I}): duplicate key '${T}' \u2014 multiple rows share this value, so the resulting map would silently drop data. Use a unique key column or pluck without a key to get an array.`);M[T]=w?.[O]}return M}return K.map((M)=>M?.[O])},async exists(){let O=V`SELECT EXISTS (${D()}) as e`,I=await j(O,"select",{signal:N,timeoutMs:H}),[K]=I;return Boolean(K?.e)},async doesntExist(){return!await this.exists()},async paginate(O,I=1,K={}){if(!Number.isFinite(O)||O<=0||!Number.isInteger(O))throw TypeError(`[query-builder] paginate(perPage): expected positive integer, got ${O}`);if(!Number.isFinite(I)||I<1||!Number.isInteger(I))throw TypeError(`[query-builder] paginate(page): expected integer >= 1, got ${I}`);if(K.tx){let o=Y$(F),$0=[...y],T0=await K.tx.unsafe(`SELECT COUNT(*) as c FROM (${o}) as sub`,$0),a=Number(T0?.[0]?.c??0),A0=Math.max(1,Math.ceil(a/O)),X9=Math.max(1,Math.min(I,A0)),_9=(X9-1)*O;return{data:await K.tx.unsafe(`${o} LIMIT ${O} OFFSET ${_9}`,$0),meta:{perPage:O,page:X9,total:a,lastPage:A0}}}let M=V`SELECT COUNT(*) as c FROM (${D()}) as sub`,w=await j(M,"select",{signal:N,timeoutMs:H}),[T]=w,k=Number(T?.c??0),x=Math.max(1,Math.ceil(k/O)),g=Math.max(1,Math.min(I,x)),B=(g-1)*O;return{data:await j(V`${D()} LIMIT ${O} OFFSET ${B}`,"select",{signal:N,timeoutMs:H}),meta:{perPage:O,page:g,total:k,lastPage:x}}},async simplePaginate(O,I=1){let K=Math.max(1,I),M=(K-1)*O,w=await j(V`${D()} LIMIT ${O+1} OFFSET ${M}`,"select",{signal:N,timeoutMs:H}),T=w.length>O;return{data:T?w.slice(0,O):w,meta:{perPage:O,page:K,hasMore:T}}},async cursorPaginate(O,I,K="id",M="asc"){let w=D();if(I!==void 0&&I!==null)if(Array.isArray(K)){let o=K.map((A0)=>V(String(A0))),$0=M==="asc"?V`>`:V`<`,T0=V`(${V(o)})`,a=V`(${V(I)})`;w=V`${w} WHERE ${T0} ${$0} ${a}`}else w=M==="asc"?V`${w} WHERE ${V(String(K))} > ${I}`:V`${w} WHERE ${V(String(K))} < ${I}`;if(Array.isArray(K)){let $0=K.map((T0)=>V`${V(String(T0))} ${M==="asc"?V`ASC`:V`DESC`}`).reduce((T0,a,A0)=>A0===0?a:V`${T0}, ${a}`);w=V`${w} ORDER BY ${$0} LIMIT ${O+1}`}else w=V`${w} ORDER BY ${V(String(K))} ${M==="asc"?V`ASC`:V`DESC`} LIMIT ${O+1}`;let T=await j(w,"select",{signal:N,timeoutMs:H}),k=T.length>O,x=T.slice(0,O),g=x[x.length-1],B=k&&g?Array.isArray(K)?K.map((o)=>g[o]):g[K]:null,f=x.length?Array.isArray(K)?K.map((o)=>x[0]?.[o]):x[0]?.[K]:null;return{data:x,meta:{perPage:O,nextCursor:B??null,prevCursor:f}}},async chunk(O,I){let K=1;while(!0){let{data:M,meta:w}=await this.paginate(O,K);if(M.length===0)break;if(await I(M),K>=w.lastPage)break;K+=1}},async chunkById(O,I="id",K){let M;while(!0){let{data:w,meta:T}=await this.cursorPaginate(O,M,I,"asc");if(w.length===0)break;if(K)await K(w);if(M=T.nextCursor,!M)break}},async eachById(O,I="id",K){await this.chunkById(O,I,async(M)=>{for(let w of M)await K?.(w)})},withTimeout(O){return H=Math.max(1,Math.floor(O)),this},abort(O){return N=O,this},withTrashed(){return A=!0,h=!1,this},onlyTrashed(){A=!0,h=!0;let O=v.softDeletes?.column||"deleted_at",I=(w,T)=>{let k=w.toUpperCase(),x=0;for(let g=0;g<w.length;g++){let B=w[g];if(B==="(")x++;else if(B===")")x--;else if(x===0&&k.substring(g,g+5)==="WHERE"&&(g===0||/\s/.test(w[g-1]??""))&&/\s/.test(w[g+5]??""))return`${w.substring(0,g)}WHERE ${T} AND ${w.substring(g+6)}`}return`${w} WHERE ${T}`},K=`${G}.${O} IS NOT NULL`;F=I(F,K);let M=String(D());return R=V([I(M,K)]),this},scope(O,I){let K=String(G),w=Z?.scopes?.[K]?.[O];if(w)return w(this,I);return this},when(O,I,K){if(O)return I(this);if(K)return K(this);return this},tap(O){return O(this),this},dump(){return console.log(String(D())),this},dd(){throw console.log(String(D())),Error("Dump and Die")},cache(O=60000){return s=O,d=!0,this},async explain(){let O=V`EXPLAIN ${D()}`;return await j(O,"select",{signal:N,timeoutMs:H})},simple(){return D().simple()},toText(){return F},async get(){let O=v.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||iX(O));if(!v.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=$._prepareStatement;if(T){let k=T(F);return X0(y.length>0?k.all(...y):k.all())}}if(R=y.length>0?$.unsafe(F,y):$.unsafe(F),!v.softDeletes?.enabled&&!d&&!H&&!N&&!I){let T=D()._stmt,k=D()._params;if(T)return X0(k&&k.length>0?T.all(...k):T.all());return X0(await D().execute())}if(!v.softDeletes?.enabled&&!d&&!H&&!N)return X0(await j(D(),"select"));let K=D();if(v.softDeletes?.enabled&&v.softDeletes.defaultFilter&&!A){let T=v.softDeletes.column,k=String(G);if((Y?Boolean(Y[k]?.columns?.[T]):!0)&&!r.DELETED_AT.test(F))K=V`${D()} WHERE ${V(String(T))} IS ${h?V`NOT NULL`:V`NULL`}`,q("WHERE",`${String(T)} IS ${h?"NOT ":""}NULL`)}let M=d?`${String(K)}\x00${JSON.stringify(y)}`:"";if(d){let T=x8.get(M);if(T)return T}let w=await j(K,"select",{signal:N,timeoutMs:H});if(d)x8.set(M,w,s);return X0(w)},async executeTakeFirst(){let O=await j(D(),"select",{signal:N,timeoutMs:H});return m(Array.isArray(O)?O[0]:O)},async executeTakeFirstOrThrow(){let O=await this.executeTakeFirst();if(!O)throw Error("Record not found");return O},async first(){let O=v.hooks,I=O&&(O.onQueryStart||O.onQueryEnd||O.onQueryError||O.startSpan||iX(O));if(!v.softDeletes?.enabled&&!d&&!H&&!N&&!I){let w=$._prepareStatement;if(w){let T=F.includes(" LIMIT ")?F:`${F} LIMIT 1`,k=w(T),x=y.length>0?k.all(...y):k.all();return m(x[0])}}let K=await j(V`${D()} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return m(M)},async firstOrFail(){let O=await this.first();if(!O)throw Error("Record not found");return O},async find(O){let I=Z?.primaryKeys[String(G)]??"id",K=await j(V`${D()} WHERE ${V(I)} = ${O} LIMIT 1`,"select",{signal:N,timeoutMs:H}),[M]=K;return M},async findOrFail(O){let I=await this.find(O);if(!I)throw Error("Record not found");return I},async findMany(O){let I=Z?.primaryKeys[String(G)]??"id";return await j(V`${D()} WHERE ${V(String(I))} IN ${V(O)}`,"select",{signal:N,timeoutMs:H})},async*lazy(){let O,I=Z?.primaryKeys[String(G)]??"id";while(!0){let M=await(O==null?V`${D()} ORDER BY ${V(String(I))} ASC LIMIT 100`:V`${D()} WHERE ${V(String(I))} > ${O} ORDER BY ${V(String(I))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let w of M)yield w;if(O=M[M.length-1]?.[I],O==null)break}},async*lazyById(){let O=Z?.primaryKeys[String(G)]??"id",I;while(!0){let M=await(I==null?V`${D()} ORDER BY ${V(String(O))} ASC LIMIT 100`:V`${D()} WHERE ${V(String(O))} > ${I} ORDER BY ${V(String(O))} ASC LIMIT 100`).execute();if(M.length===0)break;for(let w of M)yield w;if(I=M[M.length-1]?.[O],I==null)break}},pipe(O){return O(this)},async count(){let O=F.indexOf(" FROM "),I=/ GROUP BY /i.test(F),K;if(I)K=`SELECT COUNT(*) as c FROM (${F}) AS _bqb_count_sub`;else if(O!==-1)K=`SELECT COUNT(*) as c${F.substring(O)}`;else K=`SELECT COUNT(*) as c FROM ${G}`;let M=v.hooks,w=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||iX(M));if(!v.softDeletes?.enabled&&!d&&!H&&!N&&!w){let g=$._prepareStatement;if(g){let B=g(K),f=y.length>0?B.all(...y):B.all();return Number(f[0]?.c??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.c??0)},async avg(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT AVG(${O}) as a${F.substring(I)}`:`SELECT AVG(${O}) as a FROM ${G}`,M=v.hooks,w=M&&(M.onQueryStart||M.onQueryEnd||M.onQueryError||M.startSpan||iX(M));if(!v.softDeletes?.enabled&&!d&&!H&&!N&&!w){let g=$._prepareStatement;if(g){let B=g(K),f=y.length>0?B.all(...y):B.all();return Number(f[0]?.a??0)}}let T=y.length>0?$.unsafe(K,y):$.unsafe(K),k=await j(T,"select",{signal:N,timeoutMs:H}),[x]=k;return Number(x?.a??0)},async sum(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT SUM(${O}) as s${F.substring(I)}`:`SELECT SUM(${O}) as s FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),w=await j(M,"select",{signal:N,timeoutMs:H}),[T]=w;return Number(T?.s??0)},async max(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MAX(${O}) as m${F.substring(I)}`:`SELECT MAX(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),w=await j(M,"select",{signal:N,timeoutMs:H}),[T]=w;return T?.m},async min(O){let I=F.indexOf(" FROM "),K=I!==-1?`SELECT MIN(${O}) as m${F.substring(I)}`:`SELECT MIN(${O}) as m FROM ${G}`,M=y.length>0?$.unsafe(K,y):$.unsafe(K),w=await j(M,"select",{signal:N,timeoutMs:H}),[T]=w;return T?.m},lockForUpdate(){return F+=" FOR UPDATE",R=null,this},sharedLock(){let O=v.sql.sharedLockSyntax==="LOCK IN SHARE MODE"?"LOCK IN SHARE MODE":"FOR SHARE";return F+=` ${O}`,R=null,this},withCTE(O,I){return p(O,"withCTE(name)"),F=`WITH ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},withRecursive(O,I){return p(O,"withRecursive(name)"),F=`WITH RECURSIVE ${O} AS (${String(I.toSQL())}) ${F}`,R=null,this},execute(){return j(D(),"select",{signal:N,timeoutMs:H})},values(){return D().values()},toParams(){return[...y]},__rawState(){return{sql:Y$(F),params:[...y]}},raw(){return D().raw()},get rows(){return},get row(){return},cancel(){try{D().cancel()}catch{}}},{get(O,I,K){let M=Reflect.get(O,I,K);if(M!==void 0)return M;if(typeof I==="string"&&(I.startsWith("where")||I.startsWith("orWhere")||I.startsWith("andWhere"))){let w=I.startsWith("orWhere"),T=I.startsWith("andWhere"),k=`${String(G)}|${I}`,x=U.get(k);if(x===void 0){let B=I.replace(/^(?:or|and)?where/i,"");if(!B)U.set(k,""),x="";else{let f=B.charAt(0).toLowerCase()+B.slice(1),o=B.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),$0=Y?Object.keys(Y[String(G)]?.columns??{}):[];x=[o,f,f.toLowerCase()].find((T0)=>$0.includes(T0))??o,U.set(k,x)}}if(x==="")return()=>K;let g=x;return(B)=>{let f=Array.isArray(B)?V`${V(g)} IN ${V(B)}`:V`${V(g)} = ${B}`;if(R=w?V`${D()} OR ${f}`:T?V`${D()} AND ${f}`:V`${D()} WHERE ${f}`,Array.isArray(B)){let o=f0(B.length,y.length+1);q(w?"OR":T?"AND":"WHERE",`${g} IN (${o})`),y.push(...B)}else{let o=i(y.length+1);q(w?"OR":T?"AND":"WHERE",`${g} = ${o}`),y.push(B)}return K}}return Reflect.get(O,I,K)}})}return{configure(G){return Object.assign(v,G),this},id(G){if(!r.IDENTIFIER.test(G))throw Error(`[query-builder] Invalid identifier: '${G}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return $(String(G))},ids(...G){for(let J of G)if(!r.IDENTIFIER.test(J))throw Error(`[query-builder] Invalid identifier: '${J}'. Identifiers must start with a letter or underscore and contain only alphanumeric characters, underscores, and dots.`);return $(G)},select(G,...J){return W(G,J)},selectFrom(G){return W(G)},selectFromSub(G,J){function V(H){return()=>{throw Error(`[query-builder] selectFromSub(...).${H}() is not supported. Apply ${H}() to the underlying subquery BEFORE passing it to selectFromSub, or use the regular selectFrom(...) builder. This previously silently returned without `+"affecting the SQL, producing wrong results \u2014 see stacksjs/stacks#1862 #11.")}}p(String(J),"selectFromSub(alias)");let F=typeof G.__rawState==="function"?G.__rawState():null,R=G.toSQL(),D=F?.sql??(typeof R==="string"?R:R?.sql??String(R)),q=F?.params??(Array.isArray(R?.values)?R.values:[]),C=`SELECT * FROM (${D}) AS ${String(J)}`,S=(H,N,A,h,d,b,l)=>{let s=!A?"WHERE":l==="WHERE"?"AND":l,n=[...N],u=(X0,R0,z0)=>{p(X0,"selectFromSub where(column)");let y=g0(R0,"selectFromSub where(operator)");if(y==="in"||y==="not in"){let G0=Array.isArray(z0)?z0:[z0],QX=f0(G0.length,n.length+1);return n.push(...G0),`${X0} ${y.toUpperCase()} (${QX})`}let J9=i(n.length+1);return n.push(z0),`${X0} ${y} ${J9}`},m;if(typeof h==="string"&&d!==void 0)m=u(h,d,b);else if(Array.isArray(h)&&h.length===3)m=u(h[0],h[1],h[2]);else if(h&&typeof h==="object")m=Object.entries(h).map(([X0,R0])=>u(X0,"=",R0)).join(" AND ");else return{text:H,params:N};return{text:`${H} ${s} ${m}`,params:n}};function P(H,N,A=!1){let h=()=>N.length>0?$.unsafe(H,N):$.unsafe(H),d={distinct(){return P(H.replace(/^SELECT\s+/i,"SELECT DISTINCT "),N,A)},distinctOn(...b){let l=b.map(String).join(", ");return P(H.replace(/^SELECT\s+/i,`SELECT DISTINCT ON (${l}) `),N,A)},selectRaw(b){let l=DX(b,"selectFromSub.selectRaw(fragment)"),s=H.indexOf(" FROM "),n=s!==-1?`${H.slice(0,s)}, ${l}${H.slice(s)}`:`${H}, ${l}`;return P(n,N,A)},where(b,l,s){let n=S(H,N,A,b,l,s,"WHERE");return P(n.text,n.params,!0)},andWhere(b,l,s){let n=S(H,N,A,b,l,s,"AND");return P(n.text,n.params,!0)},orWhere(b,l,s){let n=S(H,N,A,b,l,s,"OR");return P(n.text,n.params,!0)},orderBy(b,l="asc"){p(String(b),"selectFromSub.orderBy(column)");let s=l==="asc"?"ASC":"DESC",n=r.ORDER_BY.test(H)?`${H}, ${b} ${s}`:`${H} ORDER BY ${b} ${s}`;return P(n,N,A)},limit(b){if(!Number.isInteger(b)||b<0)throw TypeError(`[query-builder] selectFromSub.limit(n): expected non-negative integer, got ${b}`);let l=r.LIMIT.test(H)?H.replace(r.LIMIT,` LIMIT ${b}`):`${H} LIMIT ${b}`;return P(l,N,A)},offset(b){if(!Number.isInteger(b)||b<0)throw TypeError(`[query-builder] selectFromSub.offset(n): expected non-negative integer, got ${b}`);let l=r.OFFSET.test(H)?H.replace(r.OFFSET,` OFFSET ${b}`):`${H} OFFSET ${b}`;return P(l,N,A)},toSQL(){return E(h(),H)},async execute(){return j(h(),"select")},async executeTakeFirst(){let b=await j(h(),"select");return Array.isArray(b)?b[0]:b},async executeTakeFirstOrThrow(){let b=await j(h(),"select"),l=Array.isArray(b)?b[0]:b;if(!l)throw Error("Record not found");return l},async get(){return j(h(),"select")},async first(){let b=await j(h(),"select");return Array.isArray(b)?b[0]:b},async firstOrFail(){let b=await j(h(),"select"),l=Array.isArray(b)?b[0]:b;if(!l)throw Error("No rows found");return l},async count(){let b=N.length>0?$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`,N):$.unsafe(`SELECT COUNT(*) as c FROM (${H}) as sub`),l=await j(b,"select");return Number(l?.[0]?.c??0)},async exists(){let b=N.length>0?$.unsafe(`SELECT EXISTS(${H}) as e`,N):$.unsafe(`SELECT EXISTS(${H}) as e`),l=await j(b,"select");return Boolean(l?.[0]?.e)},async doesntExist(){return!await d.exists()},values(){return h().values()},raw(){return h().raw()},cancel(){try{h().cancel()}catch{}},whereRaw:V("whereRaw"),whereColumn:V("whereColumn"),orWhereColumn:V("orWhereColumn"),whereIn:V("whereIn"),orWhereIn:V("orWhereIn"),whereNotIn:V("whereNotIn"),orWhereNotIn:V("orWhereNotIn"),whereLike:V("whereLike"),whereILike:V("whereILike"),orWhereLike:V("orWhereLike"),orWhereILike:V("orWhereILike"),whereNotLike:V("whereNotLike"),whereNotILike:V("whereNotILike"),orWhereNotLike:V("orWhereNotLike"),orWhereNotILike:V("orWhereNotILike"),whereAny:V("whereAny"),whereAll:V("whereAll"),whereNone:V("whereNone"),whereNested:V("whereNested"),orWhereNested:V("orWhereNested"),whereDate:V("whereDate"),whereBetween:V("whereBetween"),whereNotBetween:V("whereNotBetween"),whereJsonContains:V("whereJsonContains"),whereJsonPath:V("whereJsonPath"),whereNull:V("whereNull"),whereNotNull:V("whereNotNull"),whereExists:V("whereExists"),whereJsonDoesntContain:V("whereJsonDoesntContain"),whereJsonContainsKey:V("whereJsonContainsKey"),whereJsonDoesntContainKey:V("whereJsonDoesntContainKey"),whereJsonLength:V("whereJsonLength"),join:V("join"),joinSub:V("joinSub"),innerJoin:V("innerJoin"),leftJoin:V("leftJoin"),leftJoinSub:V("leftJoinSub"),rightJoin:V("rightJoin"),crossJoin:V("crossJoin"),crossJoinSub:V("crossJoinSub"),groupBy:V("groupBy"),groupByRaw:V("groupByRaw"),having:V("having"),havingRaw:V("havingRaw"),addSelect:V("addSelect"),select:V("select"),selectAll:V("selectAll"),orderByDesc:V("orderByDesc"),inRandomOrder:V("inRandomOrder"),reorder:V("reorder"),orderByRaw:V("orderByRaw"),union:V("union"),unionAll:V("unionAll"),forPage:V("forPage"),selectAllRelations:V("selectAllRelations"),with:V("with"),value:V("value"),pluck:V("pluck"),cursorPaginate:V("cursorPaginate"),paginate:V("paginate"),simplePaginate:V("simplePaginate"),chunk:V("chunk"),chunkById:V("chunkById"),eachById:V("eachById"),avg:V("avg"),sum:V("sum"),max:V("max"),min:V("min"),find:V("find"),findOrFail:V("findOrFail"),findMany:V("findMany"),latest:V("latest"),oldest:V("oldest"),lazy:V("lazy"),lazyById:V("lazyById"),pipe:(b)=>b(d),when:V("when"),tap:()=>d,dump:()=>d,dd:()=>{throw Error("Dump and Die")},explain:()=>Promise.resolve([]),simple:()=>h().simple(),toText:()=>H,toParams:()=>[...N],withTimeout:()=>d,abort:()=>d,lockForUpdate:()=>d,sharedLock:()=>d,withCTE:()=>d,withRecursive:()=>d,cache:()=>d,clone:()=>d,withTrashed:()=>d,onlyTrashed:()=>d,scope:()=>d,get rows(){return[]},get row(){return}};return d}return P(C,q)},insertInto(G){let J,V="",F=[],R=v.dialect==="postgres",D=R?(C)=>`"${String(C).replace(/"/g,'""')}"`:I0(v.dialect)?(C)=>`\`${String(C).replace(/`/g,"``")}\``:(C)=>`"${String(C).replace(/"/g,'""')}"`,q=R?(C)=>`$${C+1}`:(C)=>"?";return{values(C){let S=Array.isArray(C)?C:[C],P=S.length;if(P===0)return J=$.unsafe("SELECT 1"),this;let H=S[0],N=Object.keys(H),A=N.length,h=P*A;F.length=h;let d=R?N.map((b)=>D(b)).join(","):N.join(",");if(P===1)if(!R){let b=D(N[0]),l="?";F[0]=H[N[0]];for(let s=1;s<A;s++)b+=`,${D(N[s])}`,l+=",?",F[s]=H[N[s]];V=`INSERT INTO ${D(G)}(${b})VALUES(${l})`}else{V=`INSERT INTO ${D(G)}(${d})VALUES(`;for(let b=0;b<A;b++){if(b>0)V+=",";V+=q(b),F[b]=H[N[b]]}V+=")"}else{let b=N.map((s)=>D(s)).join(",");V=`INSERT INTO ${D(G)}(${b})VALUES`;let l=0;for(let s=0;s<P;s++){let n=S[s];if(s===0)V+="(";else V+="),(";for(let u=0;u<A;u++){if(u>0)V+=",";V+=q(l),F[l++]=n[N[u]]}}V+=")"}if(!$._prepareStatement)J=$.unsafe(V,F);return this},returning(...C){let S=`${V} RETURNING ${C.join(", ")}`,P=$.unsafe(S,F),H=async()=>{let N=await j(P,"insert");return Array.isArray(N)?N[0]:N};return{where:()=>this,andWhere:()=>this,orWhere:()=>this,orderBy:()=>this,limit:()=>this,offset:()=>this,toSQL:()=>E(P,S),execute:()=>j(P,"insert"),get:()=>j(P,"insert"),first:H,executeTakeFirst:H,async firstOrFail(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N},async executeTakeFirstOrThrow(){let N=await H();if(!N)throw Error("Insert with RETURNING returned no rows");return N}}},toSQL(){if(!J)J=$.unsafe(V,F);return E(J,V)},execute(){let C=v.hooks;if(!(C&&(C.onQueryStart||C.onQueryEnd||C.onQueryError||C.startSpan||C.beforeCreate||C.afterCreate||iX(C)))){let P=$._prepareStatement;if(P){let H=P(V);return F.length>0?H.run(...F):H.run()}}if(!J)J=$.unsafe(V,F);return j(J,"insert")},async executeTakeFirst(){if(!J)J=$.unsafe(V,F);return await j(J,"insert")},async executeTakeFirstOrThrow(){if(!J)J=$.unsafe(V,F);let C=await j(J,"insert");if(!C)throw Error("Insert failed");return C},returningAll(){let C=`${V} RETURNING *`,S=$.unsafe(C,F),P=async()=>{let H=await j(S,"insert");return Array.isArray(H)?H[0]:H};return{toSQL:()=>E(S,C),execute:()=>j(S,"insert"),get:()=>j(S,"insert"),first:P,executeTakeFirst:P,async firstOrFail(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await P();if(!H)throw Error("Insert with RETURNING returned no rows");return H}}}}},updateTable(G){let J,V=[],F=(D)=>{let q=String(D);if(I0(v.dialect))return`\`${q.replace(/`/g,"``")}\``;return`"${q.replace(/"/g,'""')}"`},R=`UPDATE ${F(String(G))}`;return{set(D){let q=Object.keys(D),C=q.length,S=Array.from({length:C});for(let P=0;P<C;P++){let H=q[P];S[P]=`${F(H)} = ${i(P+1)}`,V.push(D[H])}return R=`${R} SET ${S.join(", ")}`,J=$.unsafe(R,V),this},where(D,q,C){let S=()=>r.WHERE.test(R)?"AND":"WHERE";if(typeof D==="string"&&q!==void 0){let P=V.length+1;return R=`${R} ${S()} ${F(D)} ${q} ${i(P)}`,V.push(C),J=$.unsafe(R,V),this}if(Array.isArray(D)){let[P,H,N]=D,A=V.length+1;return R=`${R} ${S()} ${F(String(P))} ${String(H)} ${i(A)}`,V.push(N),J=$.unsafe(R,V),this}if(D&&typeof D==="object"&&!("raw"in D)){let P=Object.keys(D),H=P.length,N=V.length,A=Array.from({length:H});for(let h=0;h<H;h++)A[h]=`${F(P[h])} = ${i(N+h+1)}`,V.push(D[P[h]]);R=`${R} ${S()} ${A.join(" AND ")}`,J=$.unsafe(R,V)}return this},returning(...D){let q=`${R} RETURNING ${D.join(", ")}`,C=V.length>0?$.unsafe(q,V):$.unsafe(q),S=async()=>{let H=await j(C,"update");return Array.isArray(H)?H[0]:H},P={where:()=>P,andWhere:()=>P,orWhere:()=>P,orderBy:()=>P,limit:()=>P,offset:()=>P,toSQL:()=>E(C,q),execute:()=>j(C,"update"),get:()=>j(C,"update"),first:S,executeTakeFirst:S,async firstOrFail(){let H=await S();if(!H)throw Error("Update with RETURNING returned no rows");return H},async executeTakeFirstOrThrow(){let H=await S();if(!H)throw Error("Update with RETURNING returned no rows");return H}};return P},toSQL(){if(!J)J=V.length>0?$.unsafe(R,V):$.unsafe(R);return E(J,R)},execute(){return j(J,"update")},async executeTakeFirst(){return{numUpdatedRows:await j(J,"update")}},async executeTakeFirstOrThrow(){let D=await j(J,"update");if(D===0)throw Error("No rows updated");return{numUpdatedRows:D}},returningAll(){let D=`${R} RETURNING *`,q=V.length>0?$.unsafe(D,V):$.unsafe(D);return{toSQL:()=>E(q,D),execute:()=>j(q,"update"),async executeTakeFirst(){let C=await j(q,"update");return Array.isArray(C)?C[0]:C},async executeTakeFirstOrThrow(){let C=await j(q,"update"),S=Array.isArray(C)?C[0]:C;if(!S)throw Error("Update with RETURNING failed");return S}}}}},deleteFrom(G){let J=(P)=>{let H=String(P);if(I0(v.dialect))return`\`${H.replace(/`/g,"``")}\``;return`"${H.replace(/"/g,'""')}"`},F=`DELETE FROM ${J(String(G))}`,R=null,D=[],q=null,C=()=>r.WHERE.test(F)?"AND":"WHERE",S=()=>{if(R===null)R=D.length>0?$.unsafe(F,D):$.unsafe(F);return R};return{where(P,H,N){if(q=P,typeof P==="string"&&H!==void 0){let A=D.length+1;return F+=` ${C()} ${J(P)} ${H} ${i(A)}`,D.push(N),R=null,this}if(Array.isArray(P)){let[A,h,d]=P,b=D.length+1;return F+=` ${C()} ${J(String(A))} ${h} ${i(b)}`,D.push(d),R=null,this}if(P&&typeof P==="object"&&!("raw"in P)){let A=Object.keys(P),h=[];for(let d of A){let b=D.length+1;h.push(`${J(d)} = ${i(b)}`),D.push(P[d])}return F+=` ${C()} ${h.join(" AND ")}`,R=null,this}return R=Q({},S(),P),this},returning(...P){let H=`${F} RETURNING ${P.join(", ")}`,N=D.length>0?$.unsafe(H,D):$.unsafe(H),A=async()=>{let d=await j(N,"delete");return Array.isArray(d)?d[0]:d},h={where:()=>h,andWhere:()=>h,orWhere:()=>h,orderBy:()=>h,limit:()=>h,offset:()=>h,toSQL:()=>E(N,H),execute:()=>j(N,"delete"),get:()=>j(N,"delete"),first:A,executeTakeFirst:A,async firstOrFail(){let d=await A();if(!d)throw Error("Delete with RETURNING returned no rows");return d},async executeTakeFirstOrThrow(){let d=await A();if(!d)throw Error("Delete with RETURNING returned no rows");return d}};return h},toSQL(){return E(S(),F)},async execute(){try{await v.hooks?.beforeDelete?.({table:String(G),where:q})}catch(H){throw H}let P=await j(S(),"delete");try{await v.hooks?.afterDelete?.({table:String(G),where:q,result:P})}catch{}return P},async executeTakeFirst(){return{numDeletedRows:await j(S(),"delete")}},async executeTakeFirstOrThrow(){let P=await j(S(),"delete");if(P===0)throw Error("No rows deleted");return{numDeletedRows:P}},returningAll(){let P=`${F} RETURNING *`,H=D.length>0?$.unsafe(P,D):$.unsafe(P);return{toSQL:()=>E(H,P),execute:()=>j(H,"delete"),async executeTakeFirst(){let N=await j(H,"delete");return Array.isArray(N)?N[0]:N},async executeTakeFirstOrThrow(){let N=await j(H,"delete"),A=Array.isArray(N)?N[0]:N;if(!A)throw Error("Delete with RETURNING failed");return A}}}}},table(G){let J=this;return{insert(V){return J.insertInto(G).values(V)},update(V){return J.updateTable(G).set(V)},delete(){return J.deleteFrom(G)},select(...V){if(V.length===0)return J.selectFrom(G);return J.select(G,...V)}}},sql:$,raw(G,...J){return $(G,...J)},simple(G,...J){return $(G,...J).simple()},async advisoryLock(G){if(v.dialect==="postgres"){let J=String(G),V=7;for(let D=0;D<J.length;D++)V=V*31+J.charCodeAt(D)|0;let F=typeof G==="number"?G:Math.abs(V),R=c`SELECT pg_advisory_lock(${F})`;await j(R,"raw");return}if(I0(v.dialect)){let J=`bqb:${String(G)}`,V=c`SELECT GET_LOCK(${J}, -1) AS ok`;await j(V,"raw");return}throw Error("[query-builder] advisoryLock() is not supported on SQLite \u2014 use a Postgres or MySQL deployment for distributed locking.")},async tryAdvisoryLock(G){if(v.dialect==="postgres"){let J=String(G),V=7;for(let q=0;q<J.length;q++)V=V*31+J.charCodeAt(q)|0;let F=typeof G==="number"?G:Math.abs(V),R=c`SELECT pg_try_advisory_lock(${F}) as ok`,D=await j(R,"raw");return Boolean(D?.[0]?.ok)}if(I0(v.dialect)){let J=`bqb:${String(G)}`,V=c`SELECT GET_LOCK(${J}, 0) AS ok`,F=await j(V,"raw");return Number(F?.[0]?.ok)===1}return!1},unsafe(G,J){return $.unsafe(G,J)},file(G,J){return c.file(G,J)},async reserve(){let G=await c.reserve(),J=H0({sql:G,meta:Z,schema:Y});return J.release=()=>G.release(),J},async close(G){await c.close(G)},async listen(G,J){},async unlisten(G){},async notify(G,J){},async copyTo(G,J){throw Error("COPY TO is not yet supported by Bun.sql; placeholder")},async copyFrom(G,J,V){throw Error("COPY FROM is not yet supported by Bun.sql; placeholder")},async ping(){try{let G=c`SELECT 1`;return await j(G,"select"),!0}catch{return!1}},async waitForReady(G){let J=Math.max(1,G?.attempts??10),V=Math.max(10,G?.delayMs??100);for(let F=0;F<J;F++){if(await this.ping())return;await new Promise((R)=>setTimeout(R,V))}throw Error("Database not ready after waiting")},async transaction(G,J){let F={...X?.txDefaults,...J},R=X?.sql??c,D=X?.inTransaction===!0,q=D&&typeof R?.savepoint==="function"?"savepoint":"begin",C=async(H)=>{F.logger?.({type:"start",attempt:H});let N=Date.now();return await R[q](async(A)=>{let h=H0({sql:A,meta:Z,schema:Y,inTransaction:!0});if(F?.isolation&&!D){let l=F.isolation,s=l==="read committed"?"READ COMMITTED":l==="repeatable read"?"REPEATABLE READ":"SERIALIZABLE";if(v.dialect==="postgres")await A.unsafe(`SET TRANSACTION ISOLATION LEVEL ${s}`);else if(I0(v.dialect))await A.unsafe(`SET TRANSACTION ISOLATION LEVEL ${s}`);else if(l!=="serializable")throw Error(`[query-builder] transaction({ isolation: '${l}' }) not supported on SQLite (only 'serializable'). Use a Postgres or MySQL deployment for finer-grained isolation.`)}if(F?.readOnly)if(v.dialect==="postgres")await A.unsafe("SET TRANSACTION READ ONLY");else if(I0(v.dialect))await A.unsafe("SET TRANSACTION READ ONLY");else throw Error("[query-builder] transaction({ readOnly: true }) not supported on SQLite. Use a Postgres or MySQL deployment.");let d=await G(h),b=Date.now()-N;return F.logger?.({type:"commit",attempt:H,durationMs:b}),d})},S=Math.max(0,F?.retries??0),P=0;for(;;)try{let H=await C(P+1);return F?.afterCommit?.(),H}catch(H){let N=r_(H)||a_(H,F.sqlStates);if(P<S&&N){P++,F?.onRetry?.(P,H);let A=XQ(P,F.backoff);if(A>0)await t_(A);continue}try{F.onRollback?.(H)}catch{}try{F.afterRollback?.()}catch{}throw H}},async savepoint(G){if(X?.inTransaction!==!0)throw Error("savepoint() must be called inside a transaction");let J=$;if(!J||typeof J.savepoint!=="function")throw Error("savepoint() is not supported by the active connection");return await J.savepoint(async(V)=>{let F=H0({sql:V,meta:Z,schema:Y,inTransaction:!0});return await G(F)})},async beginDistributed(G,J){return await(X?.sql??c).beginDistributed(G,async(R)=>{let D=H0({sql:R,meta:Z,schema:Y});return await J(D)})},async commitDistributed(G){await c.commitDistributed(G)},async rollbackDistributed(G){await c.rollbackDistributed(G)},setTransactionDefaults(G){X={...X,txDefaults:{...X?.txDefaults,...G}}},transactional(G,J){return(...V)=>{return this.transaction((F)=>G(F,...V),J)}},async insertOrIgnore(G,J){let V=Array.isArray(J)?J:[J];if(!V.length)return;let{colsSql:F,valuesSql:R,params:D}=Z$(V),q=t0(String(G)),C=I0(v.dialect)?`INSERT IGNORE INTO ${q} (${F}) VALUES ${R}`:`INSERT INTO ${q} (${F}) VALUES ${R} ON CONFLICT DO NOTHING`;return c.unsafe(C,D).execute()},async insertGetId(G,J,V="id"){let{colsSql:F,valuesSql:R,params:D}=Z$([J]),q=t0(String(G));if(I0(v.dialect)){await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();let[S]=await c.unsafe("SELECT LAST_INSERT_ID() as id").execute();return S?.id}if(v.dialect==="sqlite"){let S=await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R}`,D).execute();if(S?.lastInsertRowid!=null)return S.lastInsertRowid;let[P]=await c.unsafe("SELECT last_insert_rowid() as id").execute();return P?.id}let[C]=await c.unsafe(`INSERT INTO ${q} (${F}) VALUES ${R} RETURNING ${t0(String(V))} as id`,D).execute();return C?.id},async updateOrInsert(G,J,V){let F=t0(String(G)),R=Object.keys(J),D=1,q=R.map((A)=>`${t0(A)} = ${i(D++)}`).join(" AND "),C=R.map((A)=>J[A]);if((await c.unsafe(`SELECT 1 FROM ${F} WHERE ${q} LIMIT 1`,C).execute()).length){let A=Object.keys(V),h=1,d=A.map((s)=>`${t0(s)} = ${i(h++)}`).join(", "),b=R.map((s)=>`${t0(s)} = ${i(h++)}`).join(" AND "),l=[...A.map((s)=>V[s]),...R.map((s)=>J[s])];return await c.unsafe(`UPDATE ${F} SET ${d} WHERE ${b}`,l).execute(),!0}let{colsSql:P,valuesSql:H,params:N}=Z$([{...J,...V}]);return await c.unsafe(`INSERT INTO ${F} (${P}) VALUES ${H}`,N).execute(),!0},async upsert(G,J,V,F){let R=V.map((d)=>String(d)),D=(F??[]).map((d)=>String(d)),q=J;if(!q.length)return;let{colsSql:C,valuesSql:S,params:P}=Z$(q),H=t0(String(G)),N=`INSERT INTO ${H} (${C}) VALUES ${S}`;if(I0(v.dialect)){if(D.length===0)return c.unsafe(`INSERT IGNORE INTO ${H} (${C}) VALUES ${S}`,P).execute();let d=D.map((b)=>`${t0(b)} = VALUES(${t0(b)})`).join(", ");return c.unsafe(`${N} ON DUPLICATE KEY UPDATE ${d}`,P).execute()}let A=R.map(t0).join(", ");if(D.length===0)return c.unsafe(`${N} ON CONFLICT (${A}) DO NOTHING`,P).execute();let h=D.map((d)=>`${t0(d)} = EXCLUDED.${t0(d)}`).join(", ");return c.unsafe(`${N} ON CONFLICT (${A}) DO UPDATE SET ${h}`,P).execute()},async save(G,J){let V=Z?.primaryKeys[String(G)]??"id",F=J[V];if(F!=null)if(await this.selectFrom(G).find(F)){await this.updateTable(G).set(J).where({[V]:F}).execute();let D=await this.selectFrom(G).find(F);if(!D)throw Error("save() failed to retrieve updated row");return D}else return await this.create(G,J);return await this.create(G,J)},async remove(G,J){return await this.deleteFrom(G).where({id:J}).execute()},async find(G,J){return await this.selectFrom(G).find(J)},async findOrFail(G,J){return await this.selectFrom(G).findOrFail(J)},async findMany(G,J){return await this.selectFrom(G).findMany(J)},async latest(G,J){return await this.selectFrom(G).latest(J).first()},async oldest(G,J){return await this.selectFrom(G).oldest(J).first()},skip(G,J){return this.selectFrom(G).offset(J)},async rawQuery(G){let J=Date.now();try{v.hooks?.onQueryStart?.({sql:G,kind:"raw"});let V=await c.unsafe(G);return v.hooks?.onQueryEnd?.({sql:G,durationMs:Date.now()-J,kind:"raw"}),V}catch(V){throw v.hooks?.onQueryError?.({sql:G,error:V,durationMs:Date.now()-J,kind:"raw"}),V}},async create(G,J){let V=Z?.primaryKeys[String(G)]??"id";try{await v.hooks?.beforeCreate?.({table:String(G),data:J})}catch(F){throw F}if(v.dialect==="postgres"){let F=c`INSERT INTO ${c(String(G))} ${c(J)} RETURNING ${c(String(V))} as id`,[R]=await F.execute();if(console.log("resultId",R),!R?.id)throw console.error(`create() failed to get insert ID for table ${String(G)}`),console.error("Inserted values:",J),Error(`create() failed to get insert ID for table ${String(G)}`);let D=await this.selectFrom(G).find(R.id);if(!D)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${R.id}`);try{await v.hooks?.afterCreate?.({table:String(G),data:J,result:D})}catch{}return D}else{let F=await this.insertGetId(G,J,V);if(F==null)throw Error(`create() failed to get insert ID for table ${String(G)}`);let R=await this.selectFrom(G).find(F);if(!R)throw console.error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`),console.error("Inserted values:",J),Error(`create() failed to retrieve inserted row for table ${String(G)} with id ${F}`);try{await v.hooks?.afterCreate?.({table:String(G),data:J,result:R})}catch{}return R}},async createMany(G,J){if(!J?.length)return;let V=J[0],F=Object.keys(V),R=F.length,D=J.length,q=Array.from({length:D*R}),C=I0(v.dialect)?(H)=>`\`${String(H).replace(/`/g,"``")}\``:(H)=>`"${String(H).replace(/"/g,'""')}"`,S=`INSERT INTO ${C(String(G))}(${F.map(C).join(",")})VALUES`,P=0;for(let H=0;H<D;H++){if(H>0)S+=",";S+="(";let N=J[H];for(let A=0;A<R;A++){if(A>0)S+=",";S+=i(P+1),q[P++]=N[F[A]]}S+=")"}return $.unsafe(S,q).execute()},async insertMany(G,J){if(!J?.length)return;let V=J[0],F=Object.keys(V),R=F.length,D=J.length,q=D*R,C=Array(q),S=v.dialect==="postgres",P;if(!S){let A=Array(R);for(let h=0;h<R;h++)A[h]="?";P=`(${A.join(",")})`}else P="";let H=Array(D+2);H[0]=`INSERT INTO ${G}(${F.join(",")})VALUES`;let N=0;if(!S){for(let A=0;A<D;A++){let h=J[A];H[A+1]=P;for(let d=0;d<R;d++)C[N++]=h[F[d]]}return $.unsafe(H[0]+H.slice(1,D+1).join(","),C).execute()}for(let A=0;A<D;A++){let h=J[A],d=Array(R);for(let b=0;b<R;b++)d[b]=`$${N+1}`,C[N++]=h[F[b]];H[A+1]=`(${d.join(",")})`}return $.unsafe(H[0]+H.slice(1,D+1).join(","),C).execute()},async updateMany(G,J,V){let F=Object.keys(V),R=F.length;if(R===0)return 0;let D=[],q=Array.from({length:R});for(let S=0;S<R;S++)q[S]=`${F[S]}=${i(S+1)}`,D.push(V[F[S]]);let C=`UPDATE ${G} SET ${q.join(",")}`;if(Array.isArray(J))C+=` WHERE ${J[0]}${J[1]}${i(D.length+1)}`,D.push(J[2]);else if(J&&typeof J==="object"&&!("raw"in J)){let S=Object.keys(J),P=S.length;if(P>0){let H=D.length,N=Array.from({length:P});for(let A=0;A<P;A++)N[A]=`${S[A]}=${i(H+A+1)}`,D.push(J[S[A]]);C+=` WHERE ${N.join(" AND ")}`}}return $.unsafe(C,D).execute()},async deleteMany(G,J){if(!Array.isArray(J)||J.length===0)return 0;let V=Z?.primaryKeys[String(G)]??"id",F=J.length;if(v.dialect==="postgres"){let D=Array(F);for(let q=0;q<F;q++)D[q]=`$${q+1}`;return $.unsafe(`DELETE FROM ${G} WHERE ${V} IN (${D.join(",")})`,J).execute()}let R=Array(F);for(let D=0;D<F;D++)R[D]="?";return $.unsafe(`DELETE FROM ${G} WHERE ${V} IN (${R.join(",")})`,J).execute()},async firstOrCreate(G,J,V){let F=await this.selectFrom(G).where(J).first();if(F)return F;return await this.create(G,{...J,...V})},async updateOrCreate(G,J,V){let F=await this.selectFrom(G).where(J).first();if(F){await this.updateTable(G).set(V).where(J).execute();let R=Z?.primaryKeys[String(G)]??"id",D=F[R],q=D!=null?await this.selectFrom(G).find(D):await this.selectFrom(G).where(J).first();if(!q)throw Error("updateOrCreate() failed to retrieve updated row");return q}return await this.create(G,{...J,...V})},async count(G,J){let V=J?c(String(J)):c`*`,F=c`SELECT COUNT(${V}) as c FROM ${c(String(G))}`,[R]=await F.execute();return Number(R?.c??0)},async sum(G,J){let V=c`SELECT SUM(${c(String(J))}) as s FROM ${c(String(G))}`,[F]=await V.execute();return Number(F?.s??0)},async avg(G,J){let V=c`SELECT AVG(${c(String(J))}) as a FROM ${c(String(G))}`,[F]=await V.execute();return Number(F?.a??0)},async min(G,J){let V=c`SELECT MIN(${c(String(J))}) as m FROM ${c(String(G))}`,[F]=await V.execute();return F?.m},async max(G,J){let V=c`SELECT MAX(${c(String(J))}) as m FROM ${c(String(G))}`,[F]=await V.execute();return F?.m},getRelationships(G){if(!Z?.relations)return{};let J=Z.relations[G];if(!J)return{};let V={};for(let[F,R]of Object.entries(J))if(R&&typeof R==="object"&&Object.keys(R).length>0)V[F]=R;return V},hasRelationship(G,J){if(!Z?.relations)return!1;let V=Z.relations[G];if(!V)return!1;return Object.values(V).some((F)=>F&&typeof F==="object"&&(J in F))},getRelationshipType(G,J){if(!Z?.relations)return null;let V=Z.relations[G];if(!V)return null;for(let[F,R]of Object.entries(V))if(R&&typeof R==="object"&&J in R)return F;return null},getRelationshipTarget(G,J){if(!Z?.relations)return null;let V=Z.relations[G];if(!V)return null;for(let[F,R]of Object.entries(V))if(R&&typeof R==="object"&&J in R){let D=R[J];if(typeof D==="string")return Z.modelToTable[D]||D;else if(D&&typeof D==="object"){if("model"in D)return Z.modelToTable[D.model]||D.model;if("target"in D)return Z.modelToTable[D.target]||D.target}}return null}}}function $Q(){x8.clear()}function ZQ(X){x8.setMaxSize(X)}var r,A1,k1,x8,tX,YQ=500,LZ=e(()=>{d0(),ZX(),FU(),r={SELECT_STAR:/^SELECT\s+\*/i,SELECT:/^SELECT\s+/i,SELECT_FROM:/^SELECT\s+(.+?)\s+FROM/i,WHERE:/\bWHERE\b/i,ORDER_BY:/\bORDER\s+BY\b/i,GROUP_BY:/\bGROUP\s+BY\b/i,LIMIT:/\sLIMIT\s+\d+/i,OFFSET:/\sOFFSET\s+\d+/i,IDENTIFIER:/^[A-Z_][\w.]*$/i,DELETED_AT:/\bdeleted_at\b/i},A1=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]),k1=new Set,x8=new OU,tX=new Map});async function BG(){console.log("-- Clearing query cache..."),$Q(),console.log("-- \u2713 Query cache cleared")}async function yG(){console.log("-- Query Cache Information"),console.log(),console.log("The query cache is an LRU (Least Recently Used) cache with TTL support."),console.log(),console.log("Configuration:"),console.log(" - Default max size: 100 entries"),console.log(" - Default TTL: 60 seconds (60000ms)"),console.log(" - Eviction: LRU when cache is full"),console.log(),console.log("Usage:"),console.log(' qb.selectFrom("users").cache().get() // Cache for 60s'),console.log(' qb.selectFrom("users").cache(5000).get() // Cache for 5s'),console.log(),console.log("Configuration:"),console.log(" clearQueryCache() // Clear all cached queries"),console.log(" setQueryCacheMaxSize(500) // Set max cache size"),console.log(),console.log("Commands:"),console.log(" qb cache:clear // Clear the cache"),console.log(" qb cache:config --size 500 // Configure cache size")}async function hG(X={}){if(console.log("-- Configuring query cache..."),console.log(),X.size!==void 0){let $=Number(X.size);if(Number.isNaN($)||$<=0)throw console.error("-- Error: Cache size must be a positive number"),Error("Invalid cache size");ZQ($),console.log(`-- \u2713 Cache max size set to: ${$}`)}else console.log("-- No configuration changes specified"),console.log("-- Available options:"),console.log("-- --size <n> Set maximum cache size (default: 100)"),console.log(),console.log("-- Example: qb cache:config --size 500")}var UQ=e(()=>{LZ()});async function QQ(){console.log("-- Query Builder Interactive Console"),console.log("-- Type .help for available commands"),console.log("-- Type .exit or press Ctrl+C to quit"),console.log();let X=H0(),$=_Q({input:U$.stdin,output:U$.stdout,prompt:"qb> "}),Z="",Y=!1,U=`
|
|
79
|
-
Available Commands:
|
|
80
|
-
.help Show this help message
|
|
81
|
-
.exit Exit the console
|
|
82
|
-
.tables List all tables
|
|
83
|
-
.clear Clear the screen
|
|
84
|
-
|
|
85
|
-
Query Examples:
|
|
86
|
-
qb.selectFrom('users').where({ active: true }).limit(10).execute()
|
|
87
|
-
qb.selectFrom('users').count()
|
|
88
|
-
qb.insertInto('users').values({ name: 'John' }).execute()
|
|
89
|
-
qb.selectFrom('users').where('id', '=', 1).first()
|
|
90
|
-
qb.unsafe("SELECT * FROM users WHERE id = $1", [1]).execute()
|
|
91
|
-
|
|
92
|
-
Tips:
|
|
93
|
-
- Use 'qb' to access the query builder
|
|
94
|
-
- Use 'await' for async operations
|
|
95
|
-
- Multi-line input: end with \\ to continue on next line
|
|
96
|
-
- Press Enter on an empty line to execute multi-line input
|
|
97
|
-
`,_=async(L)=>{try{let E=await new(Object.getPrototypeOf(async()=>{})).constructor("qb",`return (${L})`)(X);if(E!==void 0)if(Array.isArray(E))console.log(`-- ${E.length} row(s) returned`),console.table(E);else if(typeof E==="object"&&E!==null)console.log(E);else console.log(E)}catch(z){console.error("Error:",z.message)}},Q=async(L)=>{let z=L.trim();if(z.startsWith(".")){let j=z.toLowerCase();if(j===".exit"||j===".quit")console.log("Goodbye!"),$.close(),U$.exit(0);else if(j===".help")console.log(U);else if(j===".clear")console.clear();else if(j===".tables")try{let E=await X.unsafe(`
|
|
98
|
-
SELECT name FROM sqlite_master
|
|
99
|
-
WHERE type = 'table'
|
|
100
|
-
AND name NOT LIKE 'sqlite_%'
|
|
101
|
-
ORDER BY name
|
|
102
|
-
`);if(E.length>0){console.log("Tables:");for(let W of E)console.log(` - ${W.name}`)}else console.log("No tables found")}catch(E){console.error("Error listing tables:",E.message)}else console.log(`Unknown command: ${z}`),console.log("Type .help for available commands");return}if(z.endsWith("\\")){Y=!0,Z+=`${z.slice(0,-1)}
|
|
103
|
-
`;return}if(Y){if(z==="")await _(Z),Z="",Y=!1;else Z+=`${z}
|
|
104
|
-
`;return}if(z)await _(z)};$.on("line",async(L)=>{await Q(L),$.prompt()}),$.on("SIGINT",()=>{if(Y)console.log(`
|
|
105
|
-
-- Multi-line input cancelled`),Z="",Y=!1,$.prompt();else console.log(`
|
|
106
|
-
-- Type .exit to quit`),$.prompt()}),$.on("close",()=>{console.log(`
|
|
107
|
-
Goodbye!`),U$.exit(0)}),$.prompt()}async function fG(){return QQ()}var zQ=e(()=>{b0()});async function dG(X,$={}){let Z=$.format||"json",Y=$.output||`${X}.${Z}`,U=$.limit;if(console.log(`-- Exporting data from table: ${X}`),console.log(`-- Format: ${Z}`),console.log(`-- Output: ${Y}`),U)console.log(`-- Limit: ${U} rows`);console.log();try{let Q=H0().selectFrom(X);if(U)Q=Q.limit(U);let L=await Q.execute();if(console.log(`-- Retrieved ${L.length} rows`),Z==="json")eX(Y,JSON.stringify(L,null,2)),console.log(`-- \u2713 Exported to JSON: ${Y}`);else if(Z==="csv"){if(L.length===0){eX(Y,""),console.log(`-- \u2713 Exported to CSV: ${Y} (empty)`);return}let z=Object.keys(L[0]),j=[z.join(",")];for(let E of L){let W=z.map((G)=>{let J=E[G];if(J===null||J===void 0)return"";let V=String(J);if(V.includes(",")||V.includes('"')||V.includes(`
|
|
108
|
-
`))return`"${V.replace(/"/g,'""')}"`;return V});j.push(W.join(","))}eX(Y,j.join(`
|
|
109
|
-
`)),console.log(`-- \u2713 Exported to CSV: ${Y}`)}else if(Z==="sql"){let z=[];for(let j of L){let E=Object.keys(j),W=E.map((G)=>{let J=j[G];if(J===null||J===void 0)return"NULL";if(typeof J==="number")return String(J);return`'${String(J).replace(/'/g,"''")}'`});z.push(`INSERT INTO ${X} (${E.join(", ")}) VALUES (${W.join(", ")});`)}eX(Y,z.join(`
|
|
110
|
-
`)),console.log(`-- \u2713 Exported to SQL: ${Y}`)}}catch(_){throw console.error(`-- Failed to export data from ${X}:`,_),_}}async function pG(X,$,Z={}){if(!LQ($))throw console.error(`-- File not found: ${$}`),Error(`File not found: ${$}`);let Y=Z.format||($.endsWith(".json")?"json":"csv"),U=Z.truncate??!1;console.log(`-- Importing data into table: ${X}`),console.log(`-- Format: ${Y}`),console.log(`-- File: ${$}`),console.log(`-- Truncate: ${U}`),console.log();try{let _=H0();if(U)await _.deleteFrom(X).execute(),console.log("-- Table truncated");let Q=jQ($,"utf8"),L=[];if(Y==="json"){if(L=JSON.parse(Q),!Array.isArray(L))throw TypeError("JSON file must contain an array of objects")}else if(Y==="csv"){let E=Q.split(`
|
|
111
|
-
`).filter((G)=>G.trim());if(E.length<2){console.log("-- No data to import (CSV is empty or has only headers)");return}let W=E[0].split(",").map((G)=>G.trim());for(let G=1;G<E.length;G++){let J=E[G].split(",").map((F)=>F.trim()),V={};for(let F=0;F<W.length;F++){let R=J[F];if(R.startsWith('"')&&R.endsWith('"'))R=R.slice(1,-1).replace(/""/g,'"');if(R==="")R=null;else if(!Number.isNaN(Number(R)))R=Number(R);V[W[F]]=R}L.push(V)}}if(L.length===0){console.log("-- No data to import");return}let z=100,j=0;for(let E=0;E<L.length;E+=z){let W=L.slice(E,E+z);await _.insertInto(X).values(W).execute(),j+=W.length,console.log(`-- Imported ${j}/${L.length} rows...`)}console.log(`-- \u2713 Successfully imported ${L.length} rows`)}catch(_){throw console.error(`-- Failed to import data into ${X}:`,_),_}}async function cG(X={}){let $=v.dialect||"postgres",Z=X.output||`dump-${Date.now()}.sql`,Y=X.tables?.split(",").map((U)=>U.trim());if(console.log("-- Dumping database"),console.log(`-- Dialect: ${$}`),console.log(`-- Output: ${Z}`),Y)console.log(`-- Tables: ${Y.join(", ")}`);console.log();try{let U=H0(),_=[];if($==="sqlite")_=(await U.unsafe(`
|
|
112
|
-
SELECT name FROM sqlite_master
|
|
113
|
-
WHERE type = 'table'
|
|
114
|
-
AND name NOT LIKE 'sqlite_%'
|
|
115
|
-
ORDER BY name
|
|
116
|
-
`)).map((z)=>z.name);else if($==="postgres")_=(await U.unsafe(`
|
|
117
|
-
SELECT table_name
|
|
118
|
-
FROM information_schema.tables
|
|
119
|
-
WHERE table_schema = 'public'
|
|
120
|
-
AND table_type = 'BASE TABLE'
|
|
121
|
-
ORDER BY table_name
|
|
122
|
-
`)).map((z)=>z.table_name);else if(I0($))_=(await U.unsafe(`
|
|
123
|
-
SELECT table_name
|
|
124
|
-
FROM information_schema.tables
|
|
125
|
-
WHERE table_schema = DATABASE()
|
|
126
|
-
AND table_type = 'BASE TABLE'
|
|
127
|
-
ORDER BY table_name
|
|
128
|
-
`)).map((z)=>z.table_name);if(Y)_=_.filter((L)=>Y.includes(L));if(_.length===0){console.log("-- No tables to dump");return}console.log(`-- Dumping ${_.length} table(s)`);let Q=[];Q.push("-- Database dump"),Q.push(`-- Generated at: ${new Date().toISOString()}`),Q.push(`-- Dialect: ${$}`),Q.push("");for(let L of _){console.log(`-- Dumping table: ${L}`);let z=await U.selectFrom(L).execute();Q.push(`-- Table: ${L}`),Q.push(`-- Rows: ${z.length}`),Q.push("");for(let j of z){let E=Object.keys(j),W=E.map((G)=>{let J=j[G];if(J===null||J===void 0)return"NULL";if(typeof J==="number")return String(J);return`'${String(J).replace(/'/g,"''")}'`});Q.push(`INSERT INTO ${L} (${E.join(", ")}) VALUES (${W.join(", ")});`)}Q.push("")}eX(Z,Q.join(`
|
|
129
|
-
`)),console.log(),console.log(`-- \u2713 Database dump saved to: ${Z}`)}catch(U){throw console.error("-- Failed to dump database:",U),U}}var EQ=e(()=>{d0(),LZ()});async function GQ(){let X=v.dialect||"postgres",$=v.database?.database||"unknown";console.log("-- Database Information"),console.log(`-- Dialect: ${X}`),console.log(`-- Database: ${$}`),console.log();try{let Z=H0(),Y=[],U=[];if(X==="postgres")U=(await Z.unsafe(`
|
|
130
|
-
SELECT table_name
|
|
131
|
-
FROM information_schema.tables
|
|
132
|
-
WHERE table_schema = 'public'
|
|
133
|
-
AND table_type = 'BASE TABLE'
|
|
134
|
-
ORDER BY table_name
|
|
135
|
-
`)).map((L)=>L.table_name);else if(I0(X))U=(await Z.unsafe(`
|
|
136
|
-
SELECT table_name
|
|
137
|
-
FROM information_schema.tables
|
|
138
|
-
WHERE table_schema = DATABASE()
|
|
139
|
-
AND table_type = 'BASE TABLE'
|
|
140
|
-
ORDER BY table_name
|
|
141
|
-
`)).map((L)=>L.table_name);else if(X==="sqlite")U=(await Z.unsafe(`
|
|
142
|
-
SELECT name
|
|
143
|
-
FROM sqlite_master
|
|
144
|
-
WHERE type = 'table'
|
|
145
|
-
AND name NOT LIKE 'sqlite_%'
|
|
146
|
-
ORDER BY name
|
|
147
|
-
`)).map((L)=>L.name);for(let Q of U)try{let L=await Z.unsafe(`SELECT COUNT(*) as count FROM ${Q}`),z=Number(L[0]?.count||0),j=0,E=0;if(X==="postgres"){let W=await Z.unsafe(`
|
|
148
|
-
SELECT COUNT(*) as count
|
|
149
|
-
FROM information_schema.columns
|
|
150
|
-
WHERE table_name = $1
|
|
151
|
-
`,[Q]);j=Number(W[0]?.count||0);let G=await Z.unsafe(`
|
|
152
|
-
SELECT COUNT(*) as count
|
|
153
|
-
FROM pg_indexes
|
|
154
|
-
WHERE tablename = $1
|
|
155
|
-
`,[Q]);E=Number(G[0]?.count||0)}else if(I0(X)){let W=await Z.unsafe(`
|
|
156
|
-
SELECT COUNT(*) as count
|
|
157
|
-
FROM information_schema.columns
|
|
158
|
-
WHERE table_name = ?
|
|
159
|
-
AND table_schema = DATABASE()
|
|
160
|
-
`,[Q]);j=Number(W[0]?.count||0);let G=await Z.unsafe(`
|
|
161
|
-
SELECT COUNT(*) as count
|
|
162
|
-
FROM information_schema.statistics
|
|
163
|
-
WHERE table_name = ?
|
|
164
|
-
AND table_schema = DATABASE()
|
|
165
|
-
`,[Q]);E=Number(G[0]?.count||0)}else if(X==="sqlite")j=(await Z.unsafe(`PRAGMA table_info(${Q})`)).length,E=(await Z.unsafe(`PRAGMA index_list(${Q})`)).length;Y.push({name:Q,rowCount:z,columns:j,indexes:E})}catch(L){console.error(`-- Error getting info for table ${Q}:`,L)}let _=Y.reduce((Q,L)=>Q+L.rowCount,0);if(console.log(`-- Total Tables: ${Y.length}`),console.log(`-- Total Rows: ${_.toLocaleString()}`),console.log(),Y.length>0){console.log("Tables:"),console.log();let Q=Math.max(...Y.map((j)=>j.name.length)),L=Q+2,z="Table".padEnd(L)+"Rows".padStart(12)+"Columns".padStart(10)+"Indexes".padStart(10);console.log(z),console.log("-".repeat(z.length));for(let j of Y){let E=j.name.padEnd(Q+2),W=j.rowCount.toLocaleString().padStart(12),G=(j.columns||0).toString().padStart(10),J=(j.indexes||0).toString().padStart(10);console.log(`${E}${W}${G}${J}`)}}else console.log("-- No tables found");return{dialect:X,database:$,tables:Y,totalTables:Y.length,totalRows:_}}catch(Z){throw console.error("-- Failed to get database info:",Z),Z}}async function mG(){return GQ()}var FQ=e(()=>{d0(),b0()});async function nG(X={}){let $=X.dialect||vY.env.DB_DIALECT||v.dialect||"postgres",Z=X.aggressive||!1;if(X.verbose)console.log(`Optimizing ${$} database${Z?" (aggressive mode)":""}...`);try{if($==="postgres"){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);if(Z)await c`VACUUM FULL ANALYZE ${c(Y)}`;else await c`VACUUM ANALYZE ${c(Y)}`}else{if(X.verbose)console.log("Running VACUUM and ANALYZE on all tables...");if(Z)await c`VACUUM FULL`,await c`ANALYZE`;else await c`VACUUM ANALYZE`}console.log("\u2713 PostgreSQL optimization complete")}else if(I0($)){if(X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Optimizing table: ${Y}`);await c`OPTIMIZE TABLE ${c(Y)}`,await c`ANALYZE TABLE ${c(Y)}`}else{let Y=vY.env.DB_NAME||"test",U=await c`
|
|
166
|
-
SELECT table_name
|
|
167
|
-
FROM information_schema.tables
|
|
168
|
-
WHERE table_schema = ${Y}
|
|
169
|
-
`;for(let _ of U){let Q=_.table_name||_.TABLE_NAME;if(X.verbose)console.log(`Optimizing table: ${Q}`);await c`OPTIMIZE TABLE ${c(Q)}`,await c`ANALYZE TABLE ${c(Q)}`}}console.log("\u2713 MySQL optimization complete")}else if($==="sqlite"){if(X.verbose)console.log("Running VACUUM on SQLite database...");if(await c`VACUUM`,X.tables&&X.tables.length>0)for(let Y of X.tables){if(X.verbose)console.log(`Analyzing table: ${Y}`);await c`ANALYZE ${c(Y)}`}else await c`ANALYZE`;if(Z){if(X.verbose)console.log("Running aggressive SQLite optimizations...");await c`PRAGMA optimize`,await c`PRAGMA wal_checkpoint(TRUNCATE)`}console.log("\u2713 SQLite optimization complete")}else console.error(`Unsupported dialect: ${$}`)}catch(Y){throw console.error("Error optimizing database:",Y.message),Y}}var OQ=e(()=>{d0(),ZX()});async function lG(X={}){let $=X.dialect||bY.env.DB_DIALECT||v.dialect||"postgres";if(X.verbose)console.log(`Wiping all tables from ${$} database...`);try{let Z=[];if($==="postgres")Z=(await c`
|
|
170
|
-
SELECT tablename
|
|
171
|
-
FROM pg_tables
|
|
172
|
-
WHERE schemaname = 'public'
|
|
173
|
-
`).map((U)=>U.tablename);else if(I0($)){let Y=bY.env.DB_NAME||"test";Z=(await c`
|
|
174
|
-
SELECT table_name
|
|
175
|
-
FROM information_schema.tables
|
|
176
|
-
WHERE table_schema = ${Y}
|
|
177
|
-
`).map((_)=>_.table_name||_.TABLE_NAME)}else if($==="sqlite")Z=(await c`
|
|
178
|
-
SELECT name
|
|
179
|
-
FROM sqlite_master
|
|
180
|
-
WHERE type = 'table'
|
|
181
|
-
AND name NOT LIKE 'sqlite_%'
|
|
182
|
-
`).map((U)=>U.name);if(Z.length===0){console.log("No tables found to drop.");return}if(X.verbose)console.log(`Found ${Z.length} tables: ${Z.join(", ")}`);if($==="postgres")for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)} CASCADE`}else if(I0($)){await c`SET FOREIGN_KEY_CHECKS = 0`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)}`}await c`SET FOREIGN_KEY_CHECKS = 1`}else if($==="sqlite"){await c`PRAGMA foreign_keys = OFF`;for(let Y of Z){if(X.verbose)console.log(`Dropping table: ${Y}`);await c`DROP TABLE IF EXISTS ${c(Y)}`}await c`PRAGMA foreign_keys = ON`}console.log(`\u2713 Dropped ${Z.length} tables`)}catch(Z){throw console.error("Error wiping database:",Z.message),Z}}var JQ=e(()=>{d0(),ZX()});async function sG(X){let Y=await(H0().raw([X]).simple()?.execute?.()??Promise.resolve([]));return console.log(JSON.stringify(Y,null,2)),Y}var WQ=e(()=>{b0()});async function oG(X,$={}){let Z=H0(),Y=$.params?JSON.parse($.params):void 0,U=await Z.file(X,Y);return console.log(JSON.stringify(U)),U}var VQ=e(()=>{b0()});async function IQ(X,$={}){let Z=v.dialect||"postgres",Y=$.verbose??!0;if(Y)console.log(`-- Inspecting table: ${X}`),console.log(`-- Dialect: ${Z}`),console.log();try{let U=H0(),_=[],Q=[],L=await U.unsafe(`SELECT COUNT(*) as count FROM ${X}`),z=Number(L[0]?.count||0);if(Z==="postgres"){let j=await U.unsafe(`
|
|
183
|
-
SELECT
|
|
184
|
-
c.column_name,
|
|
185
|
-
c.data_type,
|
|
186
|
-
c.is_nullable,
|
|
187
|
-
c.column_default,
|
|
188
|
-
CASE
|
|
189
|
-
WHEN pk.column_name IS NOT NULL THEN true
|
|
190
|
-
ELSE false
|
|
191
|
-
END as is_primary_key,
|
|
192
|
-
CASE
|
|
193
|
-
WHEN fk.column_name IS NOT NULL THEN true
|
|
194
|
-
ELSE false
|
|
195
|
-
END as is_foreign_key
|
|
196
|
-
FROM information_schema.columns c
|
|
197
|
-
LEFT JOIN (
|
|
198
|
-
SELECT ku.column_name
|
|
199
|
-
FROM information_schema.table_constraints tc
|
|
200
|
-
JOIN information_schema.key_column_usage ku
|
|
201
|
-
ON tc.constraint_name = ku.constraint_name
|
|
202
|
-
WHERE tc.constraint_type = 'PRIMARY KEY'
|
|
203
|
-
AND tc.table_name = $1
|
|
204
|
-
) pk ON c.column_name = pk.column_name
|
|
205
|
-
LEFT JOIN (
|
|
206
|
-
SELECT ku.column_name
|
|
207
|
-
FROM information_schema.table_constraints tc
|
|
208
|
-
JOIN information_schema.key_column_usage ku
|
|
209
|
-
ON tc.constraint_name = ku.constraint_name
|
|
210
|
-
WHERE tc.constraint_type = 'FOREIGN KEY'
|
|
211
|
-
AND tc.table_name = $1
|
|
212
|
-
) fk ON c.column_name = fk.column_name
|
|
213
|
-
WHERE c.table_name = $1
|
|
214
|
-
ORDER BY c.ordinal_position
|
|
215
|
-
`,[X]);for(let W of j)_.push({name:W.column_name,type:W.data_type,nullable:W.is_nullable==="YES",default:W.column_default,isPrimaryKey:W.is_primary_key,isForeignKey:W.is_foreign_key});let E=await U.unsafe(`
|
|
216
|
-
SELECT
|
|
217
|
-
i.indexname as name,
|
|
218
|
-
i.indexdef,
|
|
219
|
-
ix.indisunique as is_unique
|
|
220
|
-
FROM pg_indexes i
|
|
221
|
-
JOIN pg_class c ON c.relname = i.indexname
|
|
222
|
-
JOIN pg_index ix ON ix.indexrelid = c.oid
|
|
223
|
-
WHERE i.tablename = $1
|
|
224
|
-
`,[X]);for(let W of E){let G=W.indexdef?.match(/\(([^)]+)\)/),V=(G?G[1]:"").split(",").map((F)=>F.trim());Q.push({name:W.name,columns:V,unique:W.is_unique})}}else if(I0(Z)){let j=await U.unsafe(`
|
|
225
|
-
SELECT
|
|
226
|
-
COLUMN_NAME as column_name,
|
|
227
|
-
DATA_TYPE as data_type,
|
|
228
|
-
IS_NULLABLE as is_nullable,
|
|
229
|
-
COLUMN_DEFAULT as column_default,
|
|
230
|
-
COLUMN_KEY as column_key
|
|
231
|
-
FROM information_schema.COLUMNS
|
|
232
|
-
WHERE TABLE_NAME = ?
|
|
233
|
-
AND TABLE_SCHEMA = DATABASE()
|
|
234
|
-
ORDER BY ORDINAL_POSITION
|
|
235
|
-
`,[X]);for(let G of j)_.push({name:G.column_name,type:G.data_type,nullable:G.is_nullable==="YES",default:G.column_default,isPrimaryKey:G.column_key==="PRI",isForeignKey:G.column_key==="MUL"});let E=await U.unsafe(`
|
|
236
|
-
SHOW INDEXES FROM ${X}
|
|
237
|
-
`),W=new Map;for(let G of E){let J=G.Key_name;if(!W.has(J))W.set(J,{columns:[],unique:G.Non_unique===0});W.get(J).columns.push(G.Column_name)}for(let[G,J]of W)Q.push({name:G,columns:J.columns,unique:J.unique})}else if(Z==="sqlite"){let j=await U.unsafe(`PRAGMA table_info(${X})`);for(let W of j)_.push({name:W.name,type:W.type,nullable:W.notnull===0,default:W.dflt_value,isPrimaryKey:W.pk===1});let E=await U.unsafe(`PRAGMA index_list(${X})`);for(let W of E){let G=await U.unsafe(`PRAGMA index_info(${W.name})`);Q.push({name:W.name,columns:G.map((J)=>J.name),unique:W.unique===1})}}if(Y){console.log(`Table: ${X}`),console.log(`Rows: ${z.toLocaleString()}`),console.log(),console.log("Columns:"),console.log();let j=Math.max(..._.map((V)=>V.name.length),10),E=Math.max(..._.map((V)=>V.type.length),10),W=j+2,G=E+2,J=`${"Name".padEnd(W)+"Type".padEnd(G)+"Nullable".padEnd(10)+"Default".padEnd(20)}Flags`;console.log(J),console.log("-".repeat(J.length));for(let V of _){let F=V.name.padEnd(W),R=V.type.padEnd(G),D=(V.nullable?"YES":"NO").padEnd(10),q=String(V.default||"").padEnd(20),C=[V.isPrimaryKey?"PK":"",V.isForeignKey?"FK":""].filter(Boolean).join(", ");console.log(`${F}${R}${D}${q}${C}`)}if(console.log(),Q.length>0){console.log("Indexes:"),console.log();for(let V of Q){let F=V.unique?" (UNIQUE)":"";console.log(` - ${V.name}${F}: [${V.columns.join(", ")}]`)}console.log()}}return{tableName:X,rowCount:z,columns:_,indexes:Q}}catch(U){throw console.error(`-- Failed to inspect table ${X}:`,U),U}}async function rG(X,$={}){return IQ(X,$)}var RQ=e(()=>{d0(),b0()});async function aG(X,$={}){let Z=await cX({modelsDir:X}),Y=S7(Z);return console.log(JSON.stringify(Y,null,2)),{models:Z,schema:Y}}var KQ=e(()=>{b0()});function DQ(X){let $=X.toLowerCase();if(/^bool|boolean|tinyint\(1\)/.test($))return"boolean";if(/int|serial|numeric|decimal|double|real|float|money/.test($))return"number";if(/timestamp|datetime|date|time/.test($))return"datetime";if(/json/.test($))return"json";return"string"}function MQ(X){if(/ies$/i.test(X))return X.replace(/ies$/i,"y");if(/ses$/i.test(X))return X.replace(/es$/i,"");if(/s$/i.test(X)&&!/ss$/i.test(X))return X.replace(/s$/i,"");return X}function HQ(X){return X.replace(/[-_\s]+/g," ").split(" ").filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join("")}function JU(X){return HQ(MQ(X))}async function WU(X,$){if($==="postgres")return(await X.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE' ORDER BY table_name")).map((U)=>U.table_name);if(I0($))return(await X.unsafe("SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")).map((U)=>U.table_name??U.TABLE_NAME);return(await X.unsafe("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name")).map((Y)=>Y.name)}async function CQ(X,$,Z){if($==="sqlite")return(await X.unsafe(`PRAGMA table_info(${Z})`)).map((_)=>({name:_.name,sqlType:String(_.type||""),nullable:Number(_.notnull)===0,isPrimaryKey:Number(_.pk)>0}));if($==="postgres")return(await X.unsafe(`SELECT c.column_name, c.data_type, c.is_nullable,
|
|
238
|
-
(SELECT COUNT(*) FROM information_schema.table_constraints tc
|
|
239
|
-
JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
|
|
240
|
-
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
|
|
241
|
-
FROM information_schema.columns c
|
|
242
|
-
WHERE c.table_name = $1 AND c.table_schema = 'public'
|
|
243
|
-
ORDER BY c.ordinal_position`,[Z])).map((_)=>({name:_.column_name,sqlType:String(_.data_type||""),nullable:String(_.is_nullable).toUpperCase()==="YES",isPrimaryKey:Number(_.is_pk)>0}));return(await X.unsafe(`SELECT column_name, data_type, is_nullable, column_key
|
|
244
|
-
FROM information_schema.columns
|
|
245
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
246
|
-
ORDER BY ordinal_position`,[Z])).map((U)=>({name:U.column_name??U.COLUMN_NAME,sqlType:String(U.data_type??U.DATA_TYPE??""),nullable:String(U.is_nullable??U.IS_NULLABLE).toUpperCase()==="YES",isPrimaryKey:String(U.column_key??U.COLUMN_KEY).toUpperCase()==="PRI"}))}function wQ(X,$){let Z=JU(X),Y=$.find((_)=>_.isPrimaryKey)?.name??"id",U=$.map((_)=>{let Q=[`type: '${DQ(_.sqlType)}'`];if(!_.nullable&&!_.isPrimaryKey)Q.push("required: true");return` ${_.name}: { ${Q.join(", ")} },`}).join(`
|
|
247
|
-
`);return`export const ${Z} = defineModel({
|
|
248
|
-
name: '${Z}',
|
|
249
|
-
table: '${X}',
|
|
250
|
-
primaryKey: '${Y}',
|
|
251
|
-
attributes: {
|
|
252
|
-
${U}
|
|
253
|
-
},
|
|
254
|
-
})
|
|
255
|
-
`}async function tG(X={}){let $=v.dialect||"postgres",Z=H0(),Y=X.tables?.length?X.tables:await WU(Z,$),U=[];for(let _ of Y){let Q=await CQ(Z,$,_);if(!Q.length)continue;U.push({table:_,modelName:JU(_),primaryKey:Q.find((L)=>L.isPrimaryKey)?.name??"id",columns:Q,source:wQ(_,Q)})}return U}function z5(X,$,Z){if(Z?.enumValues&&Z.enumValues.length>0)return"enum";let Y=String(X||"").toLowerCase().trim(),U=Y.replace(/\(.*$/,"").replace(/\s+/g," ").trim();if(I0($)&&/^tinyint\(1\)/.test(Y))return"boolean";if(/^bool/.test(U))return"boolean";if(U==="int8"||U==="bigint"||U==="bigserial")return"bigint";if(/^(?:int|integer|smallint|mediumint|serial|int2|int4|tinyint)/.test(U))return"integer";if(/^(?:varchar|character varying|nvarchar|nchar|char|character|bpchar)/.test(U)){let _=Y.match(/\((\d+)\)/),Q=_?Number(_[1]):void 0;return Q!==void 0&&Q>255?"text":"string"}if(/text|clob/.test(U))return"text";if(U==="float8"||/^double/.test(U))return"double";if(/^(?:real|float4|float)/.test(U))return"float";if(/^(?:numeric|decimal|money)/.test(U))return"decimal";if(U==="date")return"date";if(/^(?:timestamp|datetime)/.test(U))return"datetime";if(/^time/.test(U))return"string";if(/json/.test(U))return"json";if(/^enum/.test(U))return"enum";return"string"}function VU(X,$){let Z=`${$}_`;return X.startsWith(Z)?X.slice(Z.length):X}function bX(X){let $=String(X??"").toLowerCase().trim();if($==="cascade"||$==="restrict"||$==="set null")return $;return}async function qQ(X,$){let Z=await X.unsafe(`PRAGMA table_info(${JSON.stringify($)})`),Y=await X.unsafe(`PRAGMA index_list(${JSON.stringify($)})`),U=await X.unsafe(`PRAGMA foreign_key_list(${JSON.stringify($)})`),_=await X.unsafe("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?",[$]),Q=String(_?.[0]?.sql??""),L=new Map;for(let W of U)L.set(String(W.from),{table:String(W.table),column:String(W.to??"id"),onDelete:bX(W.on_delete),onUpdate:bX(W.on_update)});let z=[],j=new Set;for(let W of Y){let G=String(W.origin??""),J=String(W.name??"");if(G==="pk"||J.startsWith("sqlite_autoindex_"))continue;let F=(await X.unsafe(`PRAGMA index_info(${JSON.stringify(J)})`)).map((D)=>String(D.name)).filter(Boolean);if(F.length===0)continue;let R=Number(W.unique)===1;if(R&&F.length===1)j.add(F[0]);z.push({name:VU(J,$),columns:F,type:R?"unique":"index"})}let E=Z.map((W)=>{let G=String(W.name),J=PQ(Q,G),V=Number(W.pk)>0,F=W.dflt_value,R=F!==null&&F!==void 0;return{name:G,type:z5(String(W.type??""),"sqlite",{enumValues:J}),isPrimaryKey:V,isUnique:j.has(G),isNullable:V?!1:Number(W.notnull)===0,hasDefault:R,defaultValue:R?L5(F):void 0,enumValues:J,references:L.get(G)}});return{table:$,columns:E,indexes:z}}function PQ(X,$){if(!X)return;let Z=new RegExp(`(?:"${$}"|\`${$}\`|\\b${$}\\b)\\s+IN\\s*\\(([^)]*)\\)`,"i"),Y=X.match(Z);if(!Y)return;let U=Y[1].split(",").map((_)=>_.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((_)=>_.length>0);return U.length>0?U:void 0}function L5(X){if(typeof X==="number"||typeof X==="boolean")return X;return String(X)}async function TQ(X,$){let Z=await X.unsafe(`SELECT c.column_name, c.data_type, c.udt_name, c.is_nullable, c.column_default, c.character_maximum_length,
|
|
256
|
-
(SELECT COUNT(*) FROM information_schema.table_constraints tc
|
|
257
|
-
JOIN information_schema.key_column_usage k ON k.constraint_name = tc.constraint_name
|
|
258
|
-
WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_name = c.table_name AND k.column_name = c.column_name) AS is_pk
|
|
259
|
-
FROM information_schema.columns c
|
|
260
|
-
WHERE c.table_name = $1 AND c.table_schema = 'public'
|
|
261
|
-
ORDER BY c.ordinal_position`,[$]),Y=await X.unsafe(`SELECT i.relname AS index_name, ix.indisunique AS is_unique, ix.indisprimary AS is_primary,
|
|
262
|
-
a.attname AS column_name, array_position(ix.indkey, a.attnum) AS ord,
|
|
263
|
-
pg_get_expr(ix.indpred, ix.indrelid) AS where_clause
|
|
264
|
-
FROM pg_class t
|
|
265
|
-
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
266
|
-
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
267
|
-
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
268
|
-
WHERE t.relname = $1 AND t.relkind = 'r'
|
|
269
|
-
ORDER BY i.relname, ord`,[$]),U=await X.unsafe(`SELECT kcu.column_name, ccu.table_name AS ref_table, ccu.column_name AS ref_column,
|
|
270
|
-
rc.delete_rule, rc.update_rule
|
|
271
|
-
FROM information_schema.table_constraints tc
|
|
272
|
-
JOIN information_schema.key_column_usage kcu ON kcu.constraint_name = tc.constraint_name
|
|
273
|
-
JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name
|
|
274
|
-
JOIN information_schema.referential_constraints rc ON rc.constraint_name = tc.constraint_name
|
|
275
|
-
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = $1 AND tc.table_schema = 'public'`,[$]),_=new Map;for(let j of U)_.set(String(j.column_name),{table:String(j.ref_table),column:String(j.ref_column??"id"),onDelete:bX(j.delete_rule),onUpdate:bX(j.update_rule)});let{indexes:Q,uniqueColumns:L}=IU($,Y.map((j)=>({indexName:String(j.index_name),isUnique:j.is_unique===!0||j.is_unique==="t",isPrimary:j.is_primary===!0||j.is_primary==="t",column:String(j.column_name),where:j.where_clause?String(j.where_clause):void 0}))),z=Z.map((j)=>{let E=String(j.column_name),W=Number(j.is_pk)>0,G=j.column_default==null?null:String(j.column_default),J=G!=null&&/nextval\(/i.test(G),V=G!=null&&!J;return{name:E,type:z5(String(j.data_type??j.udt_name??""),"postgres"),isPrimaryKey:W,isUnique:L.has(E),isNullable:W?!1:String(j.is_nullable).toUpperCase()==="YES",hasDefault:V,defaultValue:V?L5(G):void 0,references:_.get(E)}});return{table:$,columns:z,indexes:Q}}async function NQ(X,$){let Z=await X.unsafe(`SELECT column_name, data_type, column_type, is_nullable, column_default, column_key
|
|
276
|
-
FROM information_schema.columns
|
|
277
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
278
|
-
ORDER BY ordinal_position`,[$]),Y=await X.unsafe(`SELECT index_name, non_unique, seq_in_index, column_name
|
|
279
|
-
FROM information_schema.statistics
|
|
280
|
-
WHERE table_name = ? AND table_schema = DATABASE()
|
|
281
|
-
ORDER BY index_name, seq_in_index`,[$]),U=await X.unsafe(`SELECT kcu.column_name, kcu.referenced_table_name AS ref_table, kcu.referenced_column_name AS ref_column,
|
|
282
|
-
rc.delete_rule, rc.update_rule
|
|
283
|
-
FROM information_schema.key_column_usage kcu
|
|
284
|
-
JOIN information_schema.referential_constraints rc
|
|
285
|
-
ON rc.constraint_name = kcu.constraint_name AND rc.constraint_schema = kcu.table_schema
|
|
286
|
-
WHERE kcu.table_name = ? AND kcu.table_schema = DATABASE() AND kcu.referenced_table_name IS NOT NULL`,[$]),_=new Map;for(let j of U)_.set(String(j.column_name??j.COLUMN_NAME),{table:String(j.ref_table??j.REF_TABLE),column:String(j.ref_column??j.REF_COLUMN??"id"),onDelete:bX(j.delete_rule??j.DELETE_RULE),onUpdate:bX(j.update_rule??j.UPDATE_RULE)});let{indexes:Q,uniqueColumns:L}=IU($,Y.map((j)=>({indexName:String(j.index_name??j.INDEX_NAME),isUnique:Number(j.non_unique??j.NON_UNIQUE)===0,isPrimary:String(j.index_name??j.INDEX_NAME).toUpperCase()==="PRIMARY",column:String(j.column_name??j.COLUMN_NAME)}))),z=Z.map((j)=>{let E=String(j.column_name??j.COLUMN_NAME),W=String(j.column_type??j.COLUMN_TYPE??""),G=SQ(W),V=String(j.column_key??j.COLUMN_KEY??"").toUpperCase()==="PRI",F=j.column_default??j.COLUMN_DEFAULT,R=F!=null;return{name:E,type:z5(String(j.data_type??j.DATA_TYPE??W),"mysql",{enumValues:G}),isPrimaryKey:V,isUnique:L.has(E),isNullable:V?!1:String(j.is_nullable??j.IS_NULLABLE).toUpperCase()==="YES",hasDefault:R,defaultValue:R?L5(F):void 0,enumValues:G,references:_.get(E)}});return{table:$,columns:z,indexes:Q}}function SQ(X){let $=X.match(/^enum\((.*)\)$/i);if(!$)return;return $[1].split(",").map((Z)=>Z.trim().replace(/^'(.*)'$/s,"$1").replace(/''/g,"'")).filter((Z)=>Z.length>0)}function IU(X,$){let Z=new Map;for(let _ of $){if(_.isPrimary)continue;let Q=Z.get(_.indexName)??{isUnique:_.isUnique,isPrimary:_.isPrimary,columns:[],where:_.where};Q.columns.push(_.column),Z.set(_.indexName,Q)}let Y=[],U=new Set;for(let[_,Q]of Z){if(Q.columns.length===0)continue;if(Q.isUnique&&Q.columns.length===1)U.add(Q.columns[0]);Y.push({name:VU(_,X),columns:Q.columns,type:Q.isUnique?"unique":"index",where:Q.where})}return{indexes:Y,uniqueColumns:U}}async function AQ(X,$={}){let Z=X||v.dialect||"postgres",Y=H0(),_=(($.tables?.length)?$.tables:await WU(Y,Z)).filter((L)=>L!=="migrations"),Q=[];for(let L of _){let z;if(Z==="sqlite")z=await qQ(Y,L);else if(Z==="postgres")z=await TQ(Y,L);else z=await NQ(Y,L);if(z.columns.length>0)Q.push(z)}return{dialect:Z,tables:Q}}var RU=e(()=>{d0(),b0()});function BQ(X){let $=X;while($!==fY($)){if(x1(B1($,"package.json")))return $;$=fY($)}return KU.cwd()}async function ZF(X,$={}){let Z=BQ(KU.cwd()),Y=$.dir||B1(Z,"app/Models");if(!x1(Y))kQ(Y,{recursive:!0}),console.log(`-- Created models directory: ${Y}`);let U=X.charAt(0).toUpperCase()+X.slice(1),_=$.table||`${X.toLowerCase()}s`,Q=`${U}.ts`,L=B1(Y,Q);if(x1(L))throw console.error(`-- Model already exists: ${L}`),Error(`Model already exists: ${L}`);let j=$.timestamps!==!1?` created_at: { validation: { rule: v.date() } },
|
|
287
|
-
updated_at: { validation: { rule: v.date() } },`:"",E=`import { v } from '@stacksjs/ts-validation'
|
|
288
|
-
import { defineModel } from 'bun-query-builder'
|
|
289
|
-
|
|
290
|
-
const model = defineModel({
|
|
291
|
-
name: '${U}',
|
|
292
|
-
table: '${_}',
|
|
293
|
-
primaryKey: 'id',
|
|
294
|
-
attributes: {
|
|
295
|
-
id: { validation: { rule: v.integer() } },
|
|
296
|
-
${j}
|
|
297
|
-
// Add your model attributes here
|
|
298
|
-
// Example:
|
|
299
|
-
// name: { validation: { rule: v.string() } },
|
|
300
|
-
// email: { unique: true, validation: { rule: v.string().email() } },
|
|
301
|
-
// age: { default: 0, validation: { rule: v.number().min(0) } },
|
|
302
|
-
},
|
|
303
|
-
})
|
|
304
|
-
|
|
305
|
-
export default model
|
|
306
|
-
`;xQ(L,E),console.log(`-- \u2713 Created model: ${L}`),console.log(`-- Table: ${_}`)}var yQ=()=>{};class j5{quoteIdentifier(X){return`\`${X.replace(/`/g,"``")}\``}getColumnType(X){switch(X.type){case"string":return`varchar(${X.maxLength??255})`;case"text":return"text";case"boolean":return"tinyint(1)";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"datetime";case"timestamptz":return"datetime";case"json":return"json";case"enum":if(X.enumValues&&X.enumValues.length>0)return`ENUM(${X.enumValues.map((Z)=>`'${Z.replace(/'/g,"''")}'`).join(", ")})`;return"text";default:return"text"}}getPrimaryKeyType(X){return this.getColumnType(X)}getAutoIncrementClause(X){if(X.isPrimaryKey&&(X.type==="integer"||X.type==="bigint"))return"auto_increment";return""}getDefaultValue(X){if(!X.hasDefault||X.defaultValue===void 0)return"";let $=X.defaultValue;if(typeof $==="string"){let Z=["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"],Y=$.toUpperCase();if(Z.includes(Y))return`default ${Y}`;return`default '${$.replace(/'/g,"''")}'`}else if(typeof $==="number"||typeof $==="bigint")return`default ${$}`;else if(typeof $==="boolean")return`default ${$?1:0}`;else if($ instanceof Date)return`default '${$.toISOString()}'`;return""}createEnumType(X,$){return""}createTable(X){let $=X.columns.map((Z)=>this.renderColumn(Z)).join(`,
|
|
307
|
-
`);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(X.table)} (
|
|
308
|
-
${$}
|
|
309
|
-
);`}createIndex(X,$){if($.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on MySQL. Index '${$.name}' on table '${X}' uses WHERE clause: ${$.where}`);let Z=$.type==="unique"?"UNIQUE ":"",Y=`${X}_${$.name}`,U=$.columns.map((_)=>this.quoteIdentifier(_)).join(", ");return`CREATE ${Z}INDEX ${this.quoteIdentifier(Y)} ON ${this.quoteIdentifier(X)} (${U});`}addForeignKey(X,$,Z,Y,U,_){let Q=`${X}_${$}_fk`,L=`ALTER TABLE ${this.quoteIdentifier(X)} ADD CONSTRAINT ${this.quoteIdentifier(Q)} FOREIGN KEY (${this.quoteIdentifier($)}) REFERENCES ${this.quoteIdentifier(Z)}(${this.quoteIdentifier(Y)})`;if(U)L+=` ON DELETE ${U.toUpperCase()}`;if(_)L+=` ON UPDATE ${_.toUpperCase()}`;return`${L};`}addColumn(X,$){let Z=this.getColumnType($),Y=[this.quoteIdentifier($.name),Z];if(!$.isNullable&&!$.isPrimaryKey)Y.push("not null");let U=this.getDefaultValue($);if(U)Y.push(U);return`ALTER TABLE ${this.quoteIdentifier(X)} ADD COLUMN ${Y.join(" ")};`}modifyColumn(X,$){let Z=this.getColumnType($),Y=[this.quoteIdentifier($.name),Z];if(!$.isNullable&&!$.isPrimaryKey)Y.push("not null");let U=this.getDefaultValue($);if(U)Y.push(U);return`ALTER TABLE ${this.quoteIdentifier(X)} MODIFY COLUMN ${Y.join(" ")};`}renameColumn(X,$,Z){return`ALTER TABLE ${this.quoteIdentifier(X)} RENAME COLUMN ${this.quoteIdentifier($)} TO ${this.quoteIdentifier(Z)};`}renameTable(X,$){return`RENAME TABLE ${this.quoteIdentifier(X)} TO ${this.quoteIdentifier($)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; MySQL uses in-place ALTER.")}dropTable(X){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(X)}`}dropColumn(X,$){return`ALTER TABLE ${this.quoteIdentifier(X)} DROP COLUMN ${this.quoteIdentifier($)};`}dropIndex(X,$){let Z=`${X}_${$}`;return`DROP INDEX ${this.quoteIdentifier(Z)} ON ${this.quoteIdentifier(X)};`}dropEnumType(X){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
|
|
310
|
-
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
311
|
-
migration VARCHAR(255) NOT NULL UNIQUE,
|
|
312
|
-
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
313
|
-
)`}getExecutedMigrationsQuery(){return"SELECT migration FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES (?)"}renderColumn(X){let $=this.getColumnType(X),Z=[this.quoteIdentifier(X.name),$];if(X.isPrimaryKey){Z.push("PRIMARY KEY");let U=this.getAutoIncrementClause(X);if(U)Z.push(U)}if(!X.isNullable&&!X.isPrimaryKey)Z.push("not null");let Y=this.getDefaultValue(X);if(Y)Z.push(Y);if(X.references){let U=`REFERENCES ${this.quoteIdentifier(X.references.table)}(${this.quoteIdentifier(X.references.column)})`;if(X.references.onDelete)U+=` ON DELETE ${X.references.onDelete.toUpperCase()}`;if(X.references.onUpdate)U+=` ON UPDATE ${X.references.onUpdate.toUpperCase()}`;Z.push(U)}return Z.join(" ")}}class DU{quoteIdentifier(X){return`"${X.replace(/"/g,'""')}"`}getColumnType(X){switch(X.type){case"string":return`varchar(${X.maxLength??255})`;case"text":return"text";case"boolean":return"boolean";case"integer":return"integer";case"bigint":return"bigint";case"float":return"real";case"double":return"double precision";case"decimal":return"decimal(10,2)";case"date":return"date";case"datetime":return"timestamp";case"timestamptz":return"timestamptz";case"json":return"jsonb";case"enum":if(X.enumValues&&X.enumValues.length>0)return this.quoteIdentifier(X.enumTypeName??`${X.name}_type`);return"text";default:return"text"}}getPrimaryKeyType(X){switch(X.type){case"integer":return"SERIAL";case"bigint":return"BIGSERIAL";default:return this.getColumnType(X)}}getAutoIncrementClause(X){return""}getDefaultValue(X){if(!X.hasDefault||X.defaultValue===void 0)return"";let $=X.defaultValue;if(typeof $==="string"){let Z=["CURRENT_TIMESTAMP","NOW()","NULL","CURRENT_DATE","CURRENT_TIME"],Y=$.toUpperCase();if(Z.includes(Y))return`default ${Y}`;return`default '${$.replace(/'/g,"''")}'`}else if(typeof $==="number"||typeof $==="bigint")return`default ${$}`;else if(typeof $==="boolean")return`default ${$?"true":"false"}`;else if($ instanceof Date)return`default '${$.toISOString()}'`;return""}createEnumType(X,$){let Z=$.map((Y)=>`'${Y.replace(/'/g,"''")}'`).join(", ");return`CREATE TYPE ${this.quoteIdentifier(X)} AS ENUM (${Z});`}createTable(X){let $=X.columns.map((Z)=>this.renderColumn(Z)).join(`,
|
|
314
|
-
`);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(X.table)} (
|
|
315
|
-
${$}
|
|
316
|
-
);`}createIndex(X,$){let Z=$.type==="unique"?"UNIQUE ":"",Y=`${X}_${$.name}`,U=$.columns.map((Q)=>this.quoteIdentifier(Q)).join(", "),_=$.where?` WHERE ${$.where}`:"";return`CREATE ${Z}INDEX IF NOT EXISTS ${this.quoteIdentifier(Y)} ON ${this.quoteIdentifier(X)} (${U})${_};`}addForeignKey(X,$,Z,Y,U,_){let Q=`${X}_${$}_fk`,L=`ALTER TABLE ${this.quoteIdentifier(X)} ADD CONSTRAINT ${this.quoteIdentifier(Q)} FOREIGN KEY (${this.quoteIdentifier($)}) REFERENCES ${this.quoteIdentifier(Z)}(${this.quoteIdentifier(Y)})`;if(U)L+=` ON DELETE ${U.toUpperCase()}`;if(_)L+=` ON UPDATE ${_.toUpperCase()}`;return`${L};`}addColumn(X,$){let Z=this.getColumnType($),Y=[this.quoteIdentifier($.name),Z];if(!$.isNullable&&!$.isPrimaryKey)Y.push("not null");let U=this.getDefaultValue($);if(U)Y.push(U);return`ALTER TABLE ${this.quoteIdentifier(X)} ADD COLUMN ${Y.join(" ")};`}modifyColumn(X,$){let Z=this.getColumnType($);return`ALTER TABLE ${this.quoteIdentifier(X)} ALTER COLUMN ${this.quoteIdentifier($.name)} TYPE ${Z} USING ${this.quoteIdentifier($.name)}::${Z};`}renameColumn(X,$,Z){return`ALTER TABLE ${this.quoteIdentifier(X)} RENAME COLUMN ${this.quoteIdentifier($)} TO ${this.quoteIdentifier(Z)};`}renameTable(X,$){return`ALTER TABLE ${this.quoteIdentifier(X)} RENAME TO ${this.quoteIdentifier($)};`}rebuildTable(){throw Error("[migrations] rebuildTable is only implemented for SQLite; Postgres uses in-place ALTER.")}dropTable(X){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(X)} CASCADE`}dropColumn(X,$){return`ALTER TABLE ${this.quoteIdentifier(X)} DROP COLUMN ${this.quoteIdentifier($)};`}dropIndex(X,$){let Z=`${X}_${$}`;return`DROP INDEX IF EXISTS ${this.quoteIdentifier(Z)};`}dropEnumType(X){return`DROP TYPE IF EXISTS ${this.quoteIdentifier(X)} CASCADE`}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
|
|
317
|
-
id SERIAL PRIMARY KEY,
|
|
318
|
-
migration VARCHAR(255) NOT NULL UNIQUE,
|
|
319
|
-
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
320
|
-
)`}getExecutedMigrationsQuery(){return"SELECT migration FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES ($1)"}renderColumn(X){let $=X.isPrimaryKey?this.getPrimaryKeyType(X):this.getColumnType(X),Z=[this.quoteIdentifier(X.name),$];if(X.isPrimaryKey)Z.push("PRIMARY KEY");if(!X.isNullable&&!X.isPrimaryKey)Z.push("not null");let Y=this.getDefaultValue(X);if(Y)Z.push(Y);if(X.references){let U=`REFERENCES ${this.quoteIdentifier(X.references.table)}(${this.quoteIdentifier(X.references.column)})`;if(X.references.onDelete)U+=` ON DELETE ${X.references.onDelete.toUpperCase()}`;if(X.references.onUpdate)U+=` ON UPDATE ${X.references.onUpdate.toUpperCase()}`;Z.push(U)}return Z.join(" ")}}var MU,gY=e(()=>{MU=class extends j5{createTable($){let Z=$.columns.map((Q)=>this.renderColumn(Q)).join(`,
|
|
321
|
-
`),Y=[];if($.tableKind!=="reference"){let Q=$.shardKey?.length?$.shardKey:$.columns.filter((L)=>L.isPrimaryKey).map((L)=>L.name);if(Q&&Q.length>0)Y.push(`SHARD KEY (${Q.map((L)=>this.quoteIdentifier(L)).join(", ")})`)}if($.tableKind!=="rowstore"&&$.tableKind!=="reference"){let Q=$.sortKey?.length?$.sortKey:void 0;Y.push(`SORT KEY (${(Q??[]).map((L)=>this.quoteIdentifier(L)).join(", ")})`)}let U=[Z,...Y].join(`,
|
|
322
|
-
`);return`CREATE${this.tableKindSuffix($.tableKind)} TABLE IF NOT EXISTS ${this.quoteIdentifier($.table)} (
|
|
323
|
-
${U}
|
|
324
|
-
);`}tableKindSuffix($){switch($){case"rowstore":return" ROWSTORE";case"reference":return" REFERENCE";default:return""}}addForeignKey(){return""}createIndex($,Z){if(Z.where)throw Error(`[migrations] Partial indexes (CompositeIndex.where) are not supported on SingleStore. Index '${Z.name}' on table '${$}' uses WHERE clause: ${Z.where}`);return super.createIndex($,Z)}}});function HU(X){return X==="integer"||X==="bigint"||X==="float"||X==="double"||X==="decimal"}class CU{quoteIdentifier(X){return`"${X.replace(/"/g,'""')}"`}getColumnType(X){if(X.name.endsWith("_id")&&HU(X.type))return"INTEGER";switch(X.type){case"string":return"TEXT";case"text":return"TEXT";case"boolean":return"INTEGER";case"integer":return"INTEGER";case"bigint":return"INTEGER";case"float":return"REAL";case"double":return"REAL";case"decimal":return"REAL";case"date":return"TEXT";case"datetime":return"TEXT";case"timestamptz":return"TEXT";case"json":return"TEXT";case"enum":if(X.enumValues&&X.enumValues.length>0){let $=X.enumValues.map((Z)=>`'${Z.replace(/'/g,"''")}'`).join(", ");return`TEXT CHECK (${this.quoteIdentifier(X.name)} IN (${$}))`}return"TEXT";default:return"TEXT"}}getPrimaryKeyType(X){return this.getColumnType(X)}getAutoIncrementClause(X){if(X.isPrimaryKey&&(X.type==="integer"||X.type==="bigint"))return"AUTOINCREMENT";return""}getDefaultValue(X){if(!X.hasDefault||X.defaultValue===void 0)return"";let $=X.defaultValue;if(typeof $==="string"){if(["CURRENT_TIMESTAMP","CURRENT_DATE","CURRENT_TIME","NOW()","NULL","TRUE","FALSE"].includes($.toUpperCase()))return`default ${$.toUpperCase()}`;return`default '${$.replace(/'/g,"''")}'`}else if(typeof $==="number"||typeof $==="bigint")return`default ${$}`;else if(typeof $==="boolean")return`default ${$?1:0}`;else if($ instanceof Date)return`default '${$.toISOString()}'`;return""}createEnumType(X,$){return""}createTable(X){let $=X.columns.map((Z)=>this.renderColumn(Z)).join(`,
|
|
325
|
-
`);return`CREATE TABLE IF NOT EXISTS ${this.quoteIdentifier(X.table)} (
|
|
326
|
-
${$}
|
|
327
|
-
);`}createIndex(X,$){let Z=$.type==="unique"?"UNIQUE ":"",Y=`${X}_${$.name}`,U=$.columns.map((Q)=>this.quoteIdentifier(Q)).join(", "),_=$.where?` WHERE ${$.where}`:"";return`CREATE ${Z}INDEX IF NOT EXISTS ${this.quoteIdentifier(Y)} ON ${this.quoteIdentifier(X)} (${U})${_};`}addForeignKey(X,$,Z,Y,U,_){return""}addColumn(X,$){let Z=this.getColumnType($),Y=[this.quoteIdentifier($.name),Z];if(!$.isNullable&&!$.isPrimaryKey)Y.push("not null");let U=this.getDefaultValue($);if(U)Y.push(U);return`ALTER TABLE ${this.quoteIdentifier(X)} ADD COLUMN ${Y.join(" ")};`}modifyColumn(X,$){return`-- SQLite does not support ALTER COLUMN; a table rebuild is required to change ${this.quoteIdentifier(X)}.${this.quoteIdentifier($.name)}`}renameColumn(X,$,Z){return`ALTER TABLE ${this.quoteIdentifier(X)} RENAME COLUMN ${this.quoteIdentifier($)} TO ${this.quoteIdentifier(Z)};`}renameTable(X,$){return`ALTER TABLE ${this.quoteIdentifier(X)} RENAME TO ${this.quoteIdentifier($)};`}rebuildTable(X){let{target:$,tempName:Z,columnSource:Y}=X,U=(j)=>this.quoteIdentifier(j),_=$.columns.map((j)=>this.renderColumn(j)).join(`,
|
|
328
|
-
`),Q=`CREATE TABLE ${U(Z)} (
|
|
329
|
-
${_}
|
|
330
|
-
);`,L=$.columns.map((j)=>j.name).filter((j)=>Y[j]!==void 0),z=["PRAGMA foreign_keys=OFF;","BEGIN;",Q];if(L.length>0){let j=L.map(U).join(", "),E=L.map((W)=>U(Y[W])).join(", ");z.push(`INSERT INTO ${U(Z)} (${j}) SELECT ${E} FROM ${U($.table)};`)}z.push(`DROP TABLE ${U($.table)};`),z.push(`ALTER TABLE ${U(Z)} RENAME TO ${U($.table)};`);for(let j of $.indexes)z.push(this.createIndex($.table,j));return z.push("PRAGMA foreign_key_check;"),z.push("COMMIT;"),z.push("PRAGMA foreign_keys=ON;"),z.join(`
|
|
331
|
-
`)}dropTable(X){return`DROP TABLE IF EXISTS ${this.quoteIdentifier(X)}`}dropColumn(X,$){return`ALTER TABLE ${this.quoteIdentifier(X)} DROP COLUMN ${this.quoteIdentifier($)};`}dropIndex(X,$){let Z=`${X}_${$}`;return`DROP INDEX IF EXISTS ${this.quoteIdentifier(Z)};`}dropEnumType(X){return""}createMigrationsTable(){return`CREATE TABLE IF NOT EXISTS migrations (
|
|
332
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
333
|
-
migration TEXT NOT NULL UNIQUE,
|
|
334
|
-
executed_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
335
|
-
)`}getExecutedMigrationsQuery(){return"SELECT migration FROM migrations ORDER BY executed_at"}recordMigrationQuery(){return"INSERT INTO migrations (migration) VALUES (?)"}renderColumn(X){let $=this.getColumnType(X),Z=[this.quoteIdentifier(X.name),$];if(X.isPrimaryKey){Z.push("PRIMARY KEY");let U=this.getAutoIncrementClause(X);if(U)Z.push(U)}if(!X.isNullable&&!X.isPrimaryKey)Z.push("not null");let Y=this.getDefaultValue(X);if(Y)Z.push(Y);if(X.references){if(Z.push(`REFERENCES ${this.quoteIdentifier(X.references.table)}(${this.quoteIdentifier(X.references.column)})`),X.references.onDelete)Z.push(`ON DELETE ${X.references.onDelete.toUpperCase()}`);if(X.references.onUpdate)Z.push(`ON UPDATE ${X.references.onUpdate.toUpperCase()}`)}return Z.join(" ")}}function YX(X){switch(X){case"postgres":return new DU;case"mysql":return new j5;case"singlestore":return new MU;case"sqlite":return new CU;default:throw Error(`Unsupported dialect: ${X}`)}}var jZ=e(()=>{gY(),gY()}),wU={};a1(wU,{saveMigrationSnapshot:()=>SU,resetDatabase:()=>pQ,generateMigration:()=>AU,executeMigration:()=>dQ,deleteMigrationFiles:()=>kU,copyModelsToGenerated:()=>cQ,clearGeneratedDirectory:()=>xU});function t(X){if(v.verbose)console.log(X)}function G5(X,$){let Z=i0(X,".qb");return i0(Z,`model-snapshot.${$}.json`)}function fQ(X,$){let Z=G5(X,$);if(!b9(Z))return;try{let Y=E5(Z,"utf8"),U=JSON.parse(Y);if(U?.plan&&Array.isArray(U.plan.tables)&&U.plan.dialect)return U.plan;if(Array.isArray(U?.tables)&&U?.dialect)return U;t("-- Invalid snapshot format, treating as no previous state");return}catch(Y){t(`-- Could not load snapshot, treating as no previous state: ${Y instanceof Error?Y.message:String(Y)}`);return}}function NU(X,$,Z){let Y=G5(X,$),U=i0(X,".qb"),_=Tj(Z);if(b9(Y))try{let L=JSON.parse(E5(Y,"utf8"));if(L?.hash===_&&L?.dialect===$&&L?.plan){t("-- Model snapshot unchanged");return}}catch{}if(!b9(U))qU(U,{recursive:!0}),t(`-- Created snapshot directory: ${U}`);let Q={plan:Z,hash:_,dialect:$,updatedAt:new Date().toISOString()};TU(Y,JSON.stringify(Q,null,2)),t(`-- Model snapshot saved to ${Y}`)}function SU(X,$={}){let Z=$.dialect??X.dialect;NU($.workspaceRoot??UX(),Z,X)}function UX(){return v8.cwd()}function gQ(X){let $=BU(X);if(!b9($))qU($,{recursive:!0}),t(`-- Created SQL directory: ${$}`);return $}async function AU(X,$={}){if(!X)X=i0(v8.cwd(),"app/Models");let Z=$.dialect||v.dialect||"postgres",Y=UX(),U=await cX({modelsDir:X}),_=H5(U,{dialect:Z}),Q;if(!$.full)if(Q=fQ(Y,Z),Q)t("-- Comparing with stored model snapshot");else{let G=i0(X,`.qb-migrations.${Z}.json`),J=String($.state||G);if(b9(J))try{let V=E5(J,"utf8"),F=JSON.parse(V);if(Q=F?.plan&&F.plan.tables?F.plan:F?.tables?F:void 0,Q)t("-- Comparing with legacy state file (will migrate to new snapshot format)")}catch{}if(!Q||$.fromDb)try{let V=await AQ(Z),F=new Set(_.tables.map((D)=>D.table)),R=V.tables.filter((D)=>F.has(D.table));if(R.length>0)Q={dialect:V.dialect,tables:R},t(`-- No snapshot; reconciling against live database (${R.length} matching table${R.length===1?"":"s"})`)}catch(V){t(`-- Could not introspect live database, treating as no previous state: ${V instanceof Error?V.message:String(V)}`)}if(!Q)t("-- No previous snapshot found, generating full migration")}else t("-- Full migration requested, ignoring any previous state");let L=$.full?{statements:C5(_,{dryRun:$.dryRun}),operations:_.tables.map((G)=>({kind:"create_table",table:G.table,destructive:!1,sql:""}))}:v7(Q,_,{applyRenames:$.applyRenames,dryRun:$.dryRun}),z=L.statements,j=L.operations,E=z.join(`
|
|
336
|
-
`),W=z.some((G)=>/\b(?:CREATE|ALTER|DROP)\b/i.test(G));if($.apply){let G=hQ(i0(bQ(),"qb-migrate-")),J=i0(G,"migration.sql");try{if(W)TU(J,E),t("-- Migration applied");else t("-- No changes; nothing to apply")}catch(V){throw console.error("-- Migration failed:",V),V}}if(!$.dryRun)NU(Y,Z,_);return{sql:E,sqlStatements:z,hasChanges:W,plan:_,operations:j}}async function dQ(X){if(!X)X=i0(v8.cwd(),"app/Models");let $=UX(),Z=gQ($),Y=v.dialect||"postgres",_=PU(Z).filter((Q)=>Q.endsWith(".sql")).sort();if(_.length===0)return t("-- No migration files found to execute"),!0;t(`-- Found ${_.length} script files to execute`);try{let Q=H0();await mQ(Q,Y);let L=await uQ(Q,Y),z=[],j=[];for(let W of _)if(W.includes("alter-")&&W.includes("-table"))j.push(W);else if(!L.includes(W))z.push(W);let E=z.length+j.length;if(E===0)return t("-- No pending migrations to execute"),!0;t(`-- Executing ${E} migrations (${z.length} permanent, ${j.length} transient)`);for(let W of z){let G=i0(Z,W);t(`-- Executing: ${W}`);try{await Q.file(G),await nQ(Q,W,Y),t(`-- \u2713 Migration ${W} executed and recorded`)}catch(J){throw console.error(`-- \u2717 Migration ${W} failed:`,J),J}}for(let W of j){let G=i0(Z,W);t(`-- Executing: ${W} (transient)`);try{await Q.file(G),t(`-- \u2713 Migration ${W} executed (not recorded)`),q$(G),t(`-- \uD83D\uDDD1\uFE0F Deleted transient migration: ${W}`)}catch(J){throw console.error(`-- \u2717 Migration ${W} failed:`,J),J}}t("-- All migrations executed successfully")}catch(Q){throw console.error("-- Migration execution failed:",Q),Q}return!0}async function pQ(X,$={}){if(!X)X=i0(v8.cwd(),"app/Models");let Z=$.dialect||v.dialect||"postgres",Y=YX(Z),U=UX();try{let _=Y.dropTable("migrations");try{await mZ(async(z)=>{await z.unsafe(_).execute(),t("-- Dropped migrations table")})}catch(z){console.error(z)}let Q=[],L=[];try{let z=await cX({modelsDir:X}),j=H5(z,{dialect:Z});Q=j.tables.map((W)=>W.table);let E=new Set;for(let W of j.tables)for(let G of W.columns)if(G.type==="enum"&&G.enumValues&&G.enumValues.length>0){let J=`${W.table}_${G.name}_type`;E.add(J)}L=Array.from(E)}catch(z){console.error(z),Q=[],L=[]}if(Q.length===0)t("-- No tables found to drop");else{t(`-- Dropping ${Q.length} tables: ${Q.join(", ")}`);for(let z of Q.reverse())try{let j=Y.dropTable(z);await mZ(async(E)=>{await E.unsafe(j).execute(),t(`-- Dropped table: ${z}`)})}catch(j){console.error(j),t(`-- Table ${z} may not exist, skipping drop`)}}if(L.length>0){t(`-- Dropping ${L.length} enum types: ${L.join(", ")}`);for(let z of L)try{let j=Y.dropEnumType(z);if(j)await mZ(async(E)=>{await E.unsafe(j).execute(),t(`-- Dropped enum type: ${z}`)})}catch(j){console.error(j),t(`-- Enum type ${z} may not exist, skipping drop`)}}else t("-- No enum types found to drop");if(Q.length>0)try{await kU(X,U,$)}catch(z){console.error(z),t("-- Could not clean up migration files")}else t("-- No models directory found; keeping committed migration files in place");try{await xU(U)}catch(z){console.error(z),t("-- Could not clear generated directory")}return t("-- Database reset completed successfully"),!0}catch(_){return console.error("-- Database reset failed:",_),!1}}async function kU(X,$,Z={}){if(!X)X=i0(v8.cwd(),"app/Models");if(!$)$=UX();let Y=String(Z.dialect||v.dialect||"postgres"),U=G5($,Y);if(b9(U))q$(U),t(`-- Removed model snapshot file: ${U}`);let _=i0(X,`.qb-migrations.${Y}.json`),Q=String(Z.state||_);if(b9(Q))q$(Q),t(`-- Removed legacy migration state file: ${Q}`);let L=BU($);if(b9(L)){let j=PU(L).filter((E)=>E.endsWith(".sql"));for(let E of j){let W=i0(L,E);q$(W),t(`-- Removed migration file: ${E}`)}t(`-- Cleaned up ${j.length} migration files from migrations directory`)}}async function cQ(X,$){}async function xU(X){if(!X)X=UX();let $=i0(X,"generated");if(b9($))try{vQ($,{recursive:!0,force:!0}),t("-- Cleared generated directory")}catch(Z){console.error("-- Failed to clear generated directory:",Z)}}function BU(X){if(!X)X=UX();return i0(X,"database","migrations")}async function mQ(X,$){let Y=YX($).createMigrationsTable();try{await X.unsafe(Y).execute(),t("-- Migrations table ready")}catch(U){throw console.error("-- Failed to create migrations table:",U),U}}async function uQ(X,$){let Z=YX($);try{return(await X.unsafe(Z.getExecutedMigrationsQuery()).execute()).map((U)=>U.migration)}catch(Y){return console.error("-- Failed to get executed migrations:",Y),[]}}async function nQ(X,$,Z){let Y=YX(Z);try{t(`-- Recording migration: ${$}`),await X.unsafe(Y.recordMigrationQuery(),[$]).execute(),t(`-- Successfully recorded migration: ${$}`)}catch(U){throw console.error(`-- Failed to record migration ${$}:`,U),U}}var F5=e(()=>{d0(),ZX(),jZ(),b0(),RU()});async function zF(X,$={}){return AU(X,$)}var iQ=e(()=>{F5()});function oQ(X){let $=[],Z="",Y=!1,_=X.split(`
|
|
337
|
-
`).filter((Q)=>!/^\s*--/.test(Q)).join(`
|
|
338
|
-
`);for(let Q=0;Q<_.length;Q++){let L=_[Q];if(L==="'")Y=!Y;if(L===";"&&!Y){if(Z.trim())$.push(Z.trim());Z=""}else Z+=L}if(Z.trim())$.push(Z.trim());return $}function rQ(X,$=v.dialect){let Z=(_)=>I0($)?`\`${_}\``:`"${_}"`,Y=[],U=[];for(let _ of oQ(X)){let Q;if(Q=/^CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?/i.exec(_))Y.push(`DROP TABLE IF EXISTS ${Z(Q[1])}`);else if(Q=/^ALTER\s+TABLE\s+["`']?(\w+)["`']?\s+ADD\s+(?:COLUMN\s+)?["`']?(\w+)["`']?/i.exec(_))Y.push(`ALTER TABLE ${Z(Q[1])} DROP COLUMN ${Z(Q[2])}`);else if(Q=/^CREATE\s+(?:UNIQUE\s+)?INDEX\s+(?:IF\s+NOT\s+EXISTS\s+)?["`']?(\w+)["`']?(?:\s+ON\s+["`']?(\w+)["`']?)?/i.exec(_))Y.push(I0($)&&Q[2]?`DROP INDEX ${Z(Q[1])} ON ${Z(Q[2])}`:`DROP INDEX IF EXISTS ${Z(Q[1])}`);else U.push(_)}return{down:Y.reverse(),skipped:U}}function aQ(X){let $=X;while($!==dY($)){if(y1(O5($,"package.json")))return $;$=dY($)}return yU.cwd()}function tQ(X){if(!X)X=aQ(yU.cwd());return O5(X,"database","migrations")}async function GF(X={}){let $=X.steps||1,Z=X.reverseSchema!==!1;console.log("-- Rolling back migrations"),console.log(`-- Steps: ${$}`),console.log();try{let Y=H0(),U=[];try{U=await Y.unsafe(`
|
|
339
|
-
SELECT migration, executed_at
|
|
340
|
-
FROM migrations
|
|
341
|
-
ORDER BY executed_at DESC, migration DESC
|
|
342
|
-
`)}catch(z){console.log("-- Migrations table not found. Nothing to rollback.",z);return}if(U.length===0){console.log("-- No migrations to rollback");return}let _=U.slice(0,$);console.log(`-- Found ${U.length} executed migrations`),console.log(`-- Rolling back ${_.length} migration(s):`),console.log();for(let z of _)console.log(` - ${z.migration}`);console.log();let Q=tQ(),L=!1;for(let z of _)try{let j=O5(Q,z.migration);if(Z&&y1(j)){let W=lQ(j,"utf8"),{down:G,skipped:J}=rQ(W);for(let V of G)await Y.unsafe(V),console.log(`-- \u21A9 ${V}`),L=!0;if(J.length>0)console.log(`-- \u26A0\uFE0F ${J.length} statement(s) in ${z.migration} could not be auto-reversed (data/complex DDL) \u2014 reverse manually.`)}let E="DELETE FROM migrations WHERE migration = $1";if(await Y.unsafe(E,[z.migration]),console.log(`-- \u2713 Removed migration record: ${z.migration}`),y1(j))sQ(j),console.log(`-- \uD83D\uDDD1\uFE0F Deleted migration file: ${z.migration}`)}catch(j){throw console.error(`-- \u2717 Failed to rollback migration ${z.migration}:`,j),j}if(console.log(),Z)console.log(L?"-- \u2713 Reverse DDL executed for the rolled-back migration(s).":"-- \u26A0\uFE0F No reversible DDL found; only migration records were removed.");else console.log("-- \u26A0\uFE0F reverseSchema disabled: only migration records were removed.")}catch(Y){throw console.error("-- Rollback failed:",Y),Y}}var eQ=e(()=>{d0(),b0()});function $z(X){let $=X;while($!==pY($)){if(hU(vU($,"package.json")))return $;$=pY($)}return bU.cwd()}function Zz(X){if(!X)X=$z(bU.cwd());return vU(X,"database","migrations")}async function Yz(){let X=v.dialect||"postgres",$=YX(X),Z=Zz();if(console.log("-- Migration Status"),console.log(`-- Dialect: ${X}`),console.log(`-- SQL directory: ${Z}`),console.log(),!hU(Z))return console.log("-- No SQL directory found. No migrations have been created yet."),[];let U=Xz(Z).filter((_)=>_.endsWith(".sql")).sort();if(U.length===0)return console.log("-- No migration files found"),[];try{let _=H0(),Q=[];try{Q=await _.unsafe($.getExecutedMigrationsQuery())}catch(G){console.log("-- Migrations table not found. All migrations are pending.",G),console.log()}let L=new Map(Q.map((G)=>[G.migration,G.executed_at])),z=U.map((G)=>{if(G.includes("alter-")&&G.includes("-table"))return{file:G,status:"transient"};let J=L.get(G);return{file:G,status:J?"executed":"pending",executedAt:J}}),j=z.filter((G)=>G.status==="executed"),E=z.filter((G)=>G.status==="pending"),W=z.filter((G)=>G.status==="transient");if(console.log(`-- Total migrations: ${U.length}`),console.log(`-- Executed: ${j.length}`),console.log(`-- Pending: ${E.length}`),console.log(`-- Transient: ${W.length}`),console.log(),j.length>0){console.log("\u2713 Executed Migrations:");for(let G of j)console.log(` - ${G.file} ${G.executedAt?`(${new Date(G.executedAt).toLocaleString()})`:""}`);console.log()}if(E.length>0){console.log("\u25CB Pending Migrations:");for(let G of E)console.log(` - ${G.file}`);console.log()}if(W.length>0){console.log("\u26A1 Transient Migrations (ALTER TABLE - not tracked):");for(let G of W)console.log(` - ${G.file}`);console.log()}return z}catch(_){throw console.error("-- Failed to get migration status:",_),_}}async function WF(){return Yz()}var Uz=e(()=>{d0(),jZ(),b0()});async function KF(X,$={}){let Z=$.dir||cY(Qz.cwd(),"app/Models");try{let Y=_z(Z),U=Y.find((E)=>{return E.replace(uZ(E),"").toLowerCase()===X.toLowerCase()});if(!U){console.error(`Model "${X}" not found in ${Z}`),console.log(`Available models: ${Y.filter((E)=>[".ts",".js"].includes(uZ(E))).map((E)=>E.replace(uZ(E),"")).join(", ")}`);return}let Q=await import(cY(Z,U)),L=Q.default||Q[Object.keys(Q)[0]];if(!L||!L.name){console.error(`Invalid model file: ${U}`);return}let z={name:L.name,table:L.table||`${L.name.toLowerCase()}s`,primaryKey:L.primaryKey||"id",attributes:L.attributes||{},relations:L.relations,scopes:L.scopes,indexes:L.indexes,timestamps:L.timestamps!==!1,softDeletes:L.softDeletes===!0},j=[];if(L.beforeCreate)j.push("beforeCreate");if(L.afterCreate)j.push("afterCreate");if(L.beforeUpdate)j.push("beforeUpdate");if(L.afterUpdate)j.push("afterUpdate");if(L.beforeDelete)j.push("beforeDelete");if(L.afterDelete)j.push("afterDelete");if(j.length>0)z.hooks=j;if($.json)return console.log(JSON.stringify(z,null,2)),z;console.log(`
|
|
343
|
-
\uD83D\uDCE6 Model: ${z.name}`),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`Table: ${z.table}`),console.log(`Primary Key: ${z.primaryKey}`),console.log(`Timestamps: ${z.timestamps?"\u2713":"\u2717"}`),console.log(`Soft Deletes: ${z.softDeletes?"\u2713":"\u2717"}`),console.log(`
|
|
344
|
-
\uD83D\uDCCB Attributes (${Object.keys(z.attributes).length}):`);for(let[E,W]of Object.entries(z.attributes)){let G=W.type||"string",J=W.required?"(required)":"",V=W.unique?"(unique)":"",F=W.default!==void 0?`= ${JSON.stringify(W.default)}`:"";console.log(` \u2022 ${E}: ${G} ${J} ${V} ${F}`.trim())}if(z.relations&&Object.keys(z.relations).length>0){console.log(`
|
|
345
|
-
\uD83D\uDD17 Relations (${Object.keys(z.relations).length}):`);for(let[E,W]of Object.entries(z.relations)){let G=W.type||"unknown",J=W.model||W.table||"unknown";console.log(` \u2022 ${E}: ${G} \u2192 ${J}`)}}if(z.scopes&&Object.keys(z.scopes).length>0){console.log(`
|
|
346
|
-
\uD83D\uDD0D Scopes (${Object.keys(z.scopes).length}):`);for(let E of Object.keys(z.scopes))console.log(` \u2022 ${E}()`)}if(z.hooks&&z.hooks.length>0){console.log(`
|
|
347
|
-
\uD83E\uDE9D Hooks (${z.hooks.length}):`);for(let E of z.hooks)console.log(` \u2022 ${E}`)}if(z.indexes&&z.indexes.length>0){console.log(`
|
|
348
|
-
\uD83D\uDCC7 Indexes (${z.indexes.length}):`);for(let E of z.indexes){let W=Array.isArray(E.columns)?E.columns.join(", "):E.columns,G=E.unique?"(unique)":"";console.log(` \u2022 ${E.name||"unnamed"}: [${W}] ${G}`.trim())}}return console.log(),z}catch(Y){throw console.error(`Error loading model "${X}":`,Y.message),Y}}var zz=()=>{};async function DF(){let $=await H0().ping();return console.log($?"OK":"NOT READY"),$}var Lz=e(()=>{b0()});async function CF(X,$={}){let Z=[];try{let Y=Ez(X),U=[];if(Y.isDirectory())U=jz(X).filter((z)=>uY(z)===".sql").map((z)=>Gz(X,z));else if(Y.isFile()&&uY(X)===".sql")U=[X];else return console.error("Path must be a .sql file or directory containing .sql files"),Z;if(U.length===0)return console.log("No .sql files found"),Z;if($.verbose)console.log(`Analyzing ${U.length} SQL file(s)...
|
|
349
|
-
`);for(let L of U)try{let z=mY(L,"utf8").trim();if(!z){if($.verbose)console.log(`\u2298 ${L}: empty file`);continue}if($.verbose)console.log(`\uD83D\uDCC4 ${L}`),console.log(` Query: ${z.substring(0,60)}${z.length>60?"...":""}`);let j=await c`EXPLAIN ${c.unsafe(z)}`;if(Z.push({file:L,query:z,plan:Array.isArray(j)?j:[j]}),$.verbose&&!$.json){if(console.log(" Plan:"),Array.isArray(j))for(let E of j)if(typeof E==="string")console.log(` ${E}`);else if(E["QUERY PLAN"])console.log(` ${E["QUERY PLAN"]}`);else if(E.plan)console.log(` ${JSON.stringify(E.plan)}`);else console.log(` ${JSON.stringify(E)}`);console.log()}}catch(z){if(Z.push({file:L,query:mY(L,"utf8").trim(),plan:[],error:z.message}),$.verbose)console.log(` \u2717 Error: ${z.message}
|
|
350
|
-
`)}let _=Z.filter((L)=>!L.error).length,Q=Z.filter((L)=>L.error).length;if($.verbose)console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`Summary: ${_} successful, ${Q} failed`);if($.json)console.log(JSON.stringify(Z,null,2));return Z}catch(Y){throw console.error("Error explaining queries:",Y.message),Y}}var Fz=e(()=>{ZX()});async function TF(X={}){let $=X.dir||Jz(Wz.cwd(),"app/Models"),Z=X.format||"mermaid";try{let Y=await cX({modelsDir:$});if(!Y||Object.keys(Y).length===0)return console.error("No models found"),"";let U="";if(Z==="mermaid")U=Vz(Y);else if(Z==="dot")U=Iz(Y);else return console.error(`Unsupported format: ${Z}`),"";if(X.output)Oz(X.output,U,"utf8"),console.log(`\u2713 Diagram written to: ${X.output}`);else console.log(U);return U}catch(Y){throw console.error("Error generating diagram:",Y.message),Y}}function Vz(X){let $=["erDiagram"];for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.attributes||{};$.push(` ${U} {`);for(let[Q,L]of Object.entries(_)){let z=L.type||"string",j=Y.primaryKey===Q?"PK":"",E=L.unique?"UK":"",W=[j,E].filter(Boolean).join(","),G=W?` "${W}"`:"";$.push(` ${z} ${Q}${G}`)}$.push(" }")}for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.relations||{};for(let[Q,L]of Object.entries(_)){let{type:z,model:j}=L,E=X[j]?.table||`${j?.toLowerCase()}s`||"unknown",W="";if(z==="hasOne")W="||--||";else if(z==="hasMany")W="||--o{";else if(z==="belongsTo")W="}o--||";else if(z==="belongsToMany"||z==="manyToMany")W="}o--o{";else W="||--||";$.push(` ${U} ${W} ${E} : "${Q}"`)}}return $.join(`
|
|
351
|
-
`)}function Iz(X){let $=["digraph schema {"," rankdir=LR;"," node [shape=record];",""];for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.attributes||{},Q=[];for(let[z,j]of Object.entries(_)){let E=j.type||"string",W=Y.primaryKey===z?" (PK)":"",G=j.unique?" (UK)":"";Q.push(`${z}: ${E}${W}${G}`)}let L=`${Q.join("\\l")}\\l`;$.push(` ${U} [label="{${U}|${L}}"];`)}$.push("");for(let[Z,Y]of Object.entries(X)){let U=Y.table||`${Z.toLowerCase()}s`,_=Y.relations||{};for(let[Q,L]of Object.entries(_)){let{type:z,model:j}=L,E=X[j]?.table||`${j?.toLowerCase()}s`||"unknown",W="";if(z==="hasOne")W="arrowhead=none, arrowtail=normal";else if(z==="hasMany")W="arrowhead=crow, arrowtail=none";else if(z==="belongsTo")W="arrowhead=normal, arrowtail=none";else if(z==="belongsToMany"||z==="manyToMany")W="arrowhead=crow, arrowtail=crow";$.push(` ${U} -> ${E} [label="${Q}", ${W}];`)}}return $.push("}"),$.join(`
|
|
352
|
-
`)}var Rz=e(()=>{b0()});function EZ(X){let $=X;while($!==nY($)){if(u$(u9($,"package.json")))return $;$=nY($)}return b8.cwd()}async function fU(X){if(!u$(X))return console.log(`-- Seeders directory not found: ${X}`),[];let Z=Dz(X).filter((U)=>(U.endsWith(".ts")||U.endsWith(".js"))&&U!=="index.ts"&&U!=="index.js"),Y=[];for(let U of Z){let _=u9(X,U);try{let Q=await import(_),L=Q.default||Q[Object.keys(Q)[0]];if(L&&typeof L==="function"){let z=new L;if(z&&typeof z.run==="function")Y.push({name:U.replace(/\.(ts|js)$/,""),instance:z})}}catch(Q){console.error(`-- Failed to load seeder ${U}:`,Q)}}return Y.sort((U,_)=>U.instance.order-_.instance.order),Y}async function Hz(X={}){let $=EZ(b8.cwd()),Z=X.seedersDir||u9($,"database/seeders"),Y=X.verbose??!0;if(Y)console.log("-- Running seeders..."),console.log(`-- Seeders directory: ${Z}`);let U=await fU(Z);if(U.length===0){console.log("-- No seeders found");return}if(Y)console.log(`-- Found ${U.length} seeder(s)`);let _=H0();for(let{name:Q,instance:L}of U)try{if(Y)console.log(`-- Seeding: ${Q}`);if(await L.run(_),Y)console.log(`-- \u2713 Seeded: ${Q}`)}catch(z){throw console.error(`-- \u2717 Failed to seed ${Q}:`,z),z}if(Y)console.log("-- All seeders completed successfully")}async function kF(X,$={}){let Z=EZ(b8.cwd()),Y=u9(Z,"database/seeders"),U=$.verbose??!0;if(U)console.log(`-- Running seeder: ${X}`);let Q=(await fU(Y)).find((z)=>z.name===X);if(!Q)throw console.error(`-- Seeder not found: ${X}`),Error(`Seeder not found: ${X}`);let L=H0();try{if(await Q.instance.run(L),U)console.log(`-- \u2713 Seeder completed: ${X}`)}catch(z){throw console.error(`-- \u2717 Seeder failed: ${X}`,z),z}}async function xF(X){let $=EZ(b8.cwd()),Z=u9($,"database/seeders");if(!u$(Z))Kz(Z,{recursive:!0}),console.log(`-- Created seeders directory: ${Z}`);let U=`${X.replace(/Seeder$/i,"")}Seeder`,_=`${U}.ts`,Q=u9(Z,_);if(u$(Q))throw console.error(`-- Seeder already exists: ${Q}`),Error(`Seeder already exists: ${Q}`);let L=`import type { QueryBuilder } from 'bun-query-builder'
|
|
353
|
-
import { Seeder } from 'bun-query-builder'
|
|
354
|
-
import { faker } from '@stacksjs/ts-faker'
|
|
355
|
-
|
|
356
|
-
export default class ${U} extends Seeder {
|
|
357
|
-
/**
|
|
358
|
-
* Run the database seeds.
|
|
359
|
-
*/
|
|
360
|
-
async run(qb: QueryBuilder): Promise<void> {
|
|
361
|
-
console.log('Seeding: ${U}')
|
|
362
|
-
|
|
363
|
-
// Example: Create 10 records with faker
|
|
364
|
-
const records = Array.from({ length: 10 }, () => ({
|
|
365
|
-
name: faker.person.fullName(),
|
|
366
|
-
email: faker.internet.email().toLowerCase(),
|
|
367
|
-
age: faker.number.int({ min: 18, max: 80 }),
|
|
368
|
-
created_at: faker.date.past(),
|
|
369
|
-
updated_at: new Date(),
|
|
370
|
-
}))
|
|
371
|
-
|
|
372
|
-
// Option 1: Kysely-style API
|
|
373
|
-
await qb.insertInto('table_name').values(records).execute()
|
|
374
|
-
|
|
375
|
-
// Option 2: Laravel-style API (equivalent)
|
|
376
|
-
// await qb.table('table_name').insert(records).execute()
|
|
377
|
-
|
|
378
|
-
console.log(\`\u2713 Seeded \${records.length} records\`)
|
|
379
|
-
|
|
380
|
-
// For large datasets, use batch inserts:
|
|
381
|
-
// const batchSize = 100
|
|
382
|
-
// for (let i = 0; i < records.length; i += batchSize) {
|
|
383
|
-
// const batch = records.slice(i, i + batchSize)
|
|
384
|
-
// await qb.insertInto('table_name').values(batch).execute()
|
|
385
|
-
// // Or: await qb.table('table_name').insert(batch).execute()
|
|
386
|
-
// }
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* Specify the order in which this seeder should run.
|
|
391
|
-
* Lower numbers run first. Default is 100.
|
|
392
|
-
*/
|
|
393
|
-
get order(): number {
|
|
394
|
-
return 100
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
`;Mz(Q,L),console.log(`-- \u2713 Created seeder: ${Q}`)}async function BF(X={}){let $=EZ(b8.cwd()),Z=X.modelsDir||u9($,"app/Models"),Y=X.seedersDir||u9($,"database/seeders"),U=X.verbose??!0;try{let{resetDatabase:_,generateMigration:Q,executeMigration:L}=await Promise.resolve().then(()=>(F5(),wU));if(U)console.log("-- Refreshing database...");if(await _(Z),U)console.log("-- Running migrations...");if(await Q(Z,{full:!0}),await L(),U)console.log("-- Running seeders...");if(await Hz({seedersDir:Y,verbose:U}),U)console.log("-- \u2713 Database refreshed successfully")}catch(_){throw console.error("-- \u2717 Database refresh failed:",_),_}}var Cz=e(()=>{b0()});function yF(X,$,Z={}){let Y=cX({modelsDir:X}),U=S7(Y);if(v.debug)v.debug.captureText=!0;let _=H0({schema:U}),Q=_.selectFrom($).limit(Number(Z.limit||10)).toText?.()??"";return console.log(Q||"[query]"),{sql:Q,qb:_,schema:U}}var wz=e(()=>{d0(),b0()});async function hF(X,$={}){let Z=H0(),Y=$.params?JSON.parse($.params):void 0,U=await Z.unsafe(X,Y);return console.log(JSON.stringify(U)),U}var qz=e(()=>{b0()});function Tz(X){let $=X;while($!==iY($)){if(Pz(gU($,"package.json")))return $;$=iY($)}return dU.cwd()}async function Nz(X){if(!X)X=gU(Tz(dU.cwd()),"app/Models");let $=v.dialect||"postgres";console.log("-- Validating Schema"),console.log(`-- Models directory: ${X}`),console.log(`-- Dialect: ${$}`),console.log();let Z=[];try{let Y=await cX({modelsDir:X}),U=H5(Y,{dialect:$}),_=H0(),Q=[];if($==="sqlite")Q=(await _.unsafe(`
|
|
398
|
-
SELECT name FROM sqlite_master
|
|
399
|
-
WHERE type = 'table'
|
|
400
|
-
AND name NOT LIKE 'sqlite_%'
|
|
401
|
-
AND name != 'migrations'
|
|
402
|
-
`)).map((E)=>E.name);else if($==="postgres")Q=(await _.unsafe(`
|
|
403
|
-
SELECT table_name
|
|
404
|
-
FROM information_schema.tables
|
|
405
|
-
WHERE table_schema = 'public'
|
|
406
|
-
AND table_type = 'BASE TABLE'
|
|
407
|
-
AND table_name != 'migrations'
|
|
408
|
-
`)).map((E)=>E.table_name);else if(I0($))Q=(await _.unsafe(`
|
|
409
|
-
SELECT table_name
|
|
410
|
-
FROM information_schema.tables
|
|
411
|
-
WHERE table_schema = DATABASE()
|
|
412
|
-
AND table_type = 'BASE TABLE'
|
|
413
|
-
AND table_name != 'migrations'
|
|
414
|
-
`)).map((E)=>E.table_name);let L=U.tables.map((j)=>j.table);for(let j of L)if(!Q.includes(j))Z.push({type:"missing_table",severity:"error",table:j,message:`Table '${j}' defined in models but not found in database`});for(let j of Q)if(!L.includes(j))Z.push({type:"extra_table",severity:"warning",table:j,message:`Table '${j}' exists in database but not defined in models`});for(let j of U.tables){if(!Q.includes(j.table))continue;let E=[];if($==="sqlite")E=(await _.unsafe(`PRAGMA table_info(${j.table})`)).map((V)=>({name:V.name,type:V.type.toLowerCase()}));else if($==="postgres")E=(await _.unsafe(`
|
|
415
|
-
SELECT column_name, data_type
|
|
416
|
-
FROM information_schema.columns
|
|
417
|
-
WHERE table_name = $1
|
|
418
|
-
`,[j.table])).map((V)=>({name:V.column_name,type:V.data_type.toLowerCase()}));else if(I0($))E=(await _.unsafe(`
|
|
419
|
-
SELECT column_name, data_type
|
|
420
|
-
FROM information_schema.columns
|
|
421
|
-
WHERE table_name = ?
|
|
422
|
-
AND table_schema = DATABASE()
|
|
423
|
-
`,[j.table])).map((V)=>({name:V.column_name,type:V.data_type.toLowerCase()}));let W=E.map((J)=>J.name),G=j.columns.map((J)=>J.name);for(let J of j.columns)if(!W.includes(J.name))Z.push({type:"missing_column",severity:"error",table:j.table,column:J.name,expected:J.type,message:`Column '${j.table}.${J.name}' defined in model but not found in database`});for(let J of E)if(!G.includes(J.name))Z.push({type:"extra_column",severity:"warning",table:j.table,column:J.name,actual:J.type,message:`Column '${j.table}.${J.name}' exists in database but not defined in model`});for(let J of j.columns){let V=E.find((F)=>F.name===J.name);if(V){let F=(q)=>{return q.toLowerCase().replace(/\(.*\)/,"").replace("integer","int").replace("varchar","text").replace("character varying","text").trim()},R=F(J.type),D=F(V.type);if(R!==D)Z.push({type:"type_mismatch",severity:"warning",table:j.table,column:J.name,expected:J.type,actual:V.type,message:`Column '${j.table}.${J.name}' type mismatch: expected '${J.type}', found '${V.type}'`})}}}let z=Z.filter((j)=>j.severity==="error").length===0;if(z&&Z.length===0)console.log("\u2713 Schema is valid - no issues found"),console.log();else{console.log(`-- Found ${Z.length} issue(s)`),console.log();let j=Z.filter((W)=>W.severity==="error"),E=Z.filter((W)=>W.severity==="warning");if(j.length>0){console.log(`\u2717 Errors (${j.length}):`);for(let W of j)console.log(` - ${W.message}`);console.log()}if(E.length>0){console.log(`\u26A0 Warnings (${E.length}):`);for(let W of E)console.log(` - ${W.message}`);console.log()}if(!z)console.log("-- Recommendation: Run migrations to sync the database schema"),console.log("-- qb migrate ./app/Models --apply")}return{valid:z,issues:Z}}catch(Y){throw console.error("-- Schema validation failed:",Y),Y}}async function gF(X){return Nz(X)}var Sz=e(()=>{d0(),LZ(),b0()});async function dF(X={}){let $=Number(X.attempts||10),Z=Number(X.delay||100),Y=H0();try{return await Y.waitForReady({attempts:$,delayMs:Z}),console.log("READY"),!0}catch{throw console.error("NOT READY"),Error("Database not ready")}}var Az=e(()=>{b0()}),kz=e(()=>{u_(),UQ(),zQ(),EQ(),FQ(),OQ(),JQ(),WQ(),VQ(),RQ(),KQ(),RU(),yQ(),F5(),iQ(),eQ(),Uz(),zz(),Lz(),Fz(),Rz(),Cz(),wz(),qz(),Sz(),Az()});function h1(X){if(typeof X==="string")return{model:X};if(X&&typeof X==="object"&&typeof X.model==="string"){let $=X;return{model:$.model,foreignKey:$.foreignKey,onDelete:$.onDelete}}return null}function pU(X){if(!X)return[];return(Array.isArray(X)?X:typeof X==="object"?Object.values(X):[]).map(h1).filter((Z)=>Z!==null)}function ZL(X,$){this[X]=TL.bind(null,$)}class b1{cache=new Map;totalHits=0;totalMisses=0;options;constructor(X={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...X}}generateKey(X,$){let Z=$?`:${$}`:"";return`${this.options.keyPrefix}${X}${Z}`}isExpired(X){return Date.now()-X.timestamp.getTime()>X.ttl}estimateSize(X){try{return JSON.stringify(X).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let X=Array.from(this.cache.entries()).sort(([,Z],[,Y])=>Z.timestamp.getTime()-Y.timestamp.getTime()),$=X.length-this.options.maxSize+1;for(let Z=0;Z<$;Z++)this.cache.delete(X[Z][0])}set(X,$,Z,Y){if(!this.options.enabled)return;let U=this.generateKey(X,Z),_=Y??this.options.ttl,Q=this.estimateSize($);this.cache.set(U,{value:$,timestamp:new Date,ttl:_,hits:0,size:Q}),this.evictIfNeeded()}get(X,$){if(!this.options.enabled){this.totalMisses++;return}let Z=this.generateKey(X,$),Y=this.cache.get(Z);if(!Y){this.totalMisses++;return}if(this.isExpired(Y)){this.cache.delete(Z),this.totalMisses++;return}return Y.hits++,this.totalHits++,Y.value}isFileModified(X,$){try{if(!lY(X))return!0;return sY(X).mtime>$}catch{return!0}}getWithFileCheck(X,$){let Z=this.get(X,$);if(!Z)return;if(this.isFileModified($,Z.fileTimestamp)){this.delete(X,$);return}return Z.value}setWithFileCheck(X,$,Z,Y){try{let U=lY(Z)?sY(Z):null,_=U?U.mtime:new Date;this.set(X,{value:$,fileTimestamp:_},Z,Y)}catch{this.set(X,$,Z,Y)}}delete(X,$){let Z=this.generateKey(X,$);return this.cache.delete(Z)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let X=0;for(let[$,Z]of this.cache.entries())if(this.isExpired(Z))this.cache.delete($),X++;return X}getStats(){let X=Array.from(this.cache.values()),$=X.reduce((Y,U)=>Y+U.size,0),Z=X.map((Y)=>Y.timestamp).sort();return{size:$,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Z[0],newestEntry:Z[Z.length-1]}}export(){let X={};for(let[$,Z]of this.cache.entries())X[$]={value:Z.value,timestamp:Z.timestamp.toISOString(),ttl:Z.ttl,hits:Z.hits,size:Z.size};return X}import(X){this.cache.clear();for(let[$,Z]of Object.entries(X))if(typeof Z==="object"&&Z!==null){let Y=Z;this.cache.set($,{value:Y.value,timestamp:new Date(Y.timestamp),ttl:Y.ttl,hits:Y.hits,size:Y.size})}}}class f1{metrics=[];maxMetrics=1000;async track(X,$,Z={}){let Y=performance.now(),U=new Date;try{let _=await $(),Q=performance.now()-Y;return this.recordMetric({operation:X,duration:Q,timestamp:U,...Z}),_}catch(_){let Q=performance.now()-Y;throw this.recordMetric({operation:`${X}:error`,duration:Q,timestamp:U,...Z}),_}}recordMetric(X){if(this.metrics.push(X),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(X){let $=X?this.metrics.filter((U)=>U.operation===X):this.metrics;if($.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Z=$.map((U)=>U.duration),Y=Z.reduce((U,_)=>U+_,0);return{count:$.length,averageDuration:Y/$.length,minDuration:Math.min(...Z),maxDuration:Math.max(...Z),totalDuration:Y,recentMetrics:$.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(X){return this.metrics.filter(($)=>$.duration>X)}}function YL(X,$={}){let Z=Object.keys($).sort().map((Y)=>`${Y}:${$[Y]}`).join("|");return Z?`${X}:${Z}`:X}function UL(X,$){try{return JSON.stringify(X)===JSON.stringify($)}catch{return X===$}}function _L(X){return X.getStats().size*2}function QL(X,$={}){let Z=n$.cwd();while(Z.includes("storage"))Z=oY(Z,"..");let Y=oY(Z,X||"");if($?.relative)return vz(n$.cwd(),Y);return Y}function h0(){if(k9.env.NODE_ENV==="test"||k9.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function zL(){if(k9.env.NODE_ENV==="test"||k9.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof k9<"u"){let X=k9.type;if(X==="renderer"||X==="worker")return!1;return!!(k9.versions&&(k9.versions.node||k9.versions.bun))}return!1}class mU{async format(X){let $=await zL(),Z=await this.getMetadata($);return JSON.stringify({timestamp:X.timestamp.toISOString(),level:X.level,name:X.name,message:X.message,metadata:Z})}async getMetadata(X){if(X){let{hostname:$}=await import("os");return{pid:CX.pid,hostname:$(),environment:CX.env.NODE_ENV||"development",platform:CX.platform,version:CX.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:CX.env.NODE_ENV||CX.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class i${name;fileLocks=new Map;currentKeyId=null;keys=new Map;fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(X,$={}){this.name=X,this.config={...q8},this.options=this.normalizeOptions($),this.formatter=this.options.formatter||new mU,this.enabled=$.enabled??!0,this.fancy=$.fancy??!0,this.tagFormat=$.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=$.timestampPosition??"right",this.environment=$.environment??W0.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig($);let Z={...$},Y=$.timestamp!==void 0;if(Y)delete Z.timestamp;if(this.config={...this.config,...Z,timestamp:Y||this.config.timestamp,level:this.options.level??"info"},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let U=this.generateKeyId(),_=this.generateKey();this.currentKeyId=U,this.keys.set(U,_),this.encryptionKeys.set(U,{key:_,createdAt:new Date}),this.setupKeyRotation()}}shouldActivateFingersCrossed(X){if(!this.fingersCrossedConfig)return!1;let $={debug:0,info:1,success:2,warning:3,error:4},Z=this.fingersCrossedConfig.activationLevel??"error";return $[X]>=$[Z]}initializeFingersCrossedConfig(X){if(!X.fingersCrossedEnabled&&X.fingersCrossed)return{...P$,...X.fingersCrossed};if(!X.fingersCrossedEnabled)return null;if(!X.fingersCrossed)return{...P$};return{...P$,...X.fingersCrossed}}normalizeOptions(X){let $={format:"json",level:"info",logDirectory:q8.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,showIcons:!0,formatter:void 0},Z={...$,...Object.fromEntries(Object.entries(X).filter(([,Y])=>Y!==void 0))};if(!Z.level||!["debug","info","success","warning","error"].includes(Z.level))Z.level=$.level;return Z}shouldWriteToFile(){return!h0()&&this.config.writeToFile===!0}async writeToFile(X){let $=(async()=>{let Y,U=0,_=3,Q=1000;while(U<_)try{try{try{await pz(this.config.logDirectory,eY.F_OK|eY.W_OK)}catch(z){if(z instanceof Error&&"code"in z)if(z.code==="ENOENT")await cz(this.config.logDirectory,{recursive:!0,mode:493});else if(z.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw z;else throw z}}catch(z){throw console.error("Debug: [writeToFile] Failed to create log directory:",z),z}let L=this.validateEncryptionConfig()?(await this.encrypt(X)).encrypted:C9.from(X);try{if(!_$(this.currentLogFile))await lZ(this.currentLogFile,"",{mode:420});if(Y=tY(this.currentLogFile,"a",420),dz(Y,L,{flag:"a"}),aY(Y),Y!==void 0)iZ(Y),Y=void 0;if((await MX(this.currentLogFile)).size===0){if(await lZ(this.currentLogFile,L,{flag:"w",mode:420}),(await MX(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(z){let j=z;if(j.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(j.code)){if(U<_-1){let E=typeof j.message==="string"?j.message:"Unknown error";console.error(`Network error during write attempt ${U+1}/${_}:`,E);let W=Q*2**U;await new Promise((G)=>setTimeout(G,W)),U++;continue}}if(j?.code&&["ENOSPC","EDQUOT"].includes(j.code))throw Error(`Disk quota exceeded or no space left on device: ${j.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",j),j}finally{if(Y!==void 0)try{iZ(Y)}catch(z){console.error("Debug: [writeToFile] Error closing file descriptor:",z)}}}catch(L){if(U===_-1){let j=L,E=typeof j.message==="string"?j.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",E),L}U++;let z=Q*2**(U-1);await new Promise((j)=>setTimeout(j,z))}})();this.pendingOperations.push($);let Z=this.pendingOperations.length-1;try{await $}catch(Y){throw console.error("Debug: [writeToFile] Error in operation:",Y),Y}finally{this.pendingOperations.splice(Z,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return HX(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return HX(this.config.logDirectory,`${this.name}.log`);let X=new Date().toISOString().split("T")[0];return HX(this.config.logDirectory,`${this.name}-${X}.log`)}setupRotation(){if(h0())return;if(!this.shouldWriteToFile())return;if(typeof this.config.rotation==="boolean")return;let X=this.config.rotation,$;switch(X.frequency){case"daily":$=86400000;break;case"weekly":$=604800000;break;case"monthly":$=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},$)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let $=typeof X.interval==="number"?X.interval:60,Z=Math.max($,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch((Y)=>{console.error("Error rotating keys:",Y)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,$=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=$,this.keys.set($,Z),this.encryptionKeys.set($,{key:Z,createdAt:new Date});let Y=Array.from(this.encryptionKeys.entries()).sort(([,Q],[,L])=>L.createdAt.getTime()-Q.createdAt.getTime()),U=typeof X.maxKeys==="number"?X.maxKeys:1,_=Math.max(1,U);if(Y.length>_)for(let[Q]of Y.slice(_))this.encryptionKeys.delete(Q),this.keys.delete(Q)}generateKeyId(){return nZ(16).toString("hex")}generateKey(){return nZ(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let X=this.keys.get(this.currentKeyId);if(!X)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:X,id:this.currentKeyId}}encrypt(X){let{key:$}=this.getCurrentKey(),Z=nZ(16),Y=bz("aes-256-gcm",$,Z),U=C9.isBuffer(X)?X:C9.from(X,"utf8"),_=Y.update(U),Q=Y.final(),L=_.length+Q.length,z=Y.getAuthTag(),j=C9.allocUnsafe(16+L+16);return Z.copy(j,0),_.copy(j,16),Q.copy(j,16+_.length),z.copy(j,16+L),{encrypted:j,iv:Z}}async compressData(X){return new Promise(($,Z)=>{let Y=$6(),U=[];Y.on("data",(_)=>U.push(_)),Y.on("end",()=>$(C9.from(C9.concat(U)))),Y.on("error",Z),Y.write(X),Y.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let X={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let $=this.config.rotation.encrypt;return{...X,...$}}return X}async rotateLog(){if(h0())return;if(!this.shouldWriteToFile())return;let X=await MX(this.currentLogFile).catch(()=>null);if(!X)return;let $=this.config.rotation;if(typeof $==="boolean")return;if($.maxSize&&X.size>=$.maxSize){let Z=this.currentLogFile,Y=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let U=await Q$(this.config.logDirectory),_=U.filter((z)=>z.startsWith(this.name)&&/\.log\.\d+$/.test(z)).sort((z,j)=>{let E=Number.parseInt(z.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(j.match(/\.log\.(\d+)$/)?.[1]||"0")-E}),Q=_.length>0?Number.parseInt(_[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,L=`${Z}.${Q}`;if(await MX(Z).catch(()=>null))try{if(await X6(Z,L),$.compress)try{let z=`${L}.gz`;await this.compressLogFile(L,z),await z$(L)}catch(z){console.error("Error compressing rotated file:",z)}if(_.length===0&&!U.some((z)=>z.endsWith(".log.1")))try{let z=`${Z}.1`;await lZ(z,"")}catch(z){console.error("Error creating backup file:",z)}}catch(z){console.error(`Error during rotation: ${z instanceof Error?z.message:String(z)}`)}}else{let U=new Date().toISOString().replace(/[:.]/g,"-"),_=Z.replace(/\.log$/,`-${U}.log`);if(await MX(Z).catch(()=>null))await X6(Z,_)}if(this.currentLogFile=Y,$.maxFiles){let U=(await Q$(this.config.logDirectory)).filter((_)=>_.startsWith(this.name)).sort((_,Q)=>Q.localeCompare(_));for(let _ of U.slice($.maxFiles))await z$(HX(this.config.logDirectory,_))}}}async compressLogFile(X,$){let Z=rY(X),Y=gz($),U=$6();await nz(Z,U,Y)}async handleFingersCrossedBuffer(X,$){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(X)&&!this.isActivated){this.isActivated=!0;for(let Z of this.logBuffer){let Y=await this.formatter.format(Z);if(this.shouldWriteToFile())await this.writeToFile(Y);console.log(Y)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated){if(this.shouldWriteToFile())await this.writeToFile($);console.log($)}}shouldLog(X){if(!this.enabled)return!1;let $={debug:0,info:1,success:2,warning:3,error:4};return $[X]>=$[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((X)=>{if(X instanceof Promise)return X.catch(($)=>{console.error("Error in pending write operation:",$)});return Promise.resolve()})),_$(this.currentLogFile))try{let X=tY(this.currentLogFile,"r+");aY(X),iZ(X)}catch(X){console.error(`Error flushing file: ${X}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let X of this.pendingOperations)if(typeof X.cancel==="function")X.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(X){console.error("Error waiting for pending operations:",X)}if(!h0()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await Q$(this.config.logDirectory)).filter(($)=>($.includes("temp")||$.includes(".tmp"))&&$.includes(this.name));for(let $ of X)try{await z$(HX(this.config.logDirectory,$))}catch(Z){console.error(`Failed to delete temp file ${$}:`,Z)}}catch(X){console.error("Error cleaning up temporary files:",X)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(X){if(!X)return"";return`${this.tagFormat.prefix}${X}${this.tagFormat.suffix}`}formatFileTimestamp(X){return`[${X.toISOString()}]`}formatConsoleTimestamp(X){return this.shouldStyleConsole()?J0.gray(X.toLocaleTimeString()):X.toLocaleTimeString()}shouldStyleConsole(){if(!this.fancy||h0())return!1;let X=typeof W0.env.NO_COLOR<"u",$=W0.env.FORCE_COLOR==="0";if(X||$)return!1;return!!(typeof W0.stderr<"u"&&W0.stderr.isTTY||typeof W0.stdout<"u"&&W0.stdout.isTTY)}formatConsoleMessage(X){let{timestamp:$,icon:Z="",tag:Y="",message:U,level:_,showTimestamp:Q=!0}=X,L=(J)=>J.replace(this.ANSI_PATTERN,"");if(!this.fancy){let J=[];if(Q)J.push($);if(_==="warning")J.push("WARN");else if(_==="error")J.push("ERROR");else if(Z)J.push(Z.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Y)J.push(Y.replace(/[[\]]/g,""));return J.push(U),J.join(" ")}let z=W0.stdout.columns||120,j="";if(_==="warning"||_==="error")j=`${Z} ${U}`;else if(_==="info"||_==="success")j=`${Z} ${Y} ${U}`;else j=`${Z} ${Y} ${J0.cyan(U)}`;if(!Q)return j.trim();let E=L(j).trim().length,W=L($).length,G=Math.max(1,z-2-E-W);return`${j.trim()}${" ".repeat(G)}${$}`}formatMessage(X,$){if($.length===1&&Array.isArray($[0]))return X.replace(/\{(\d+)\}/g,(_,Q)=>{let L=Number.parseInt(Q,10);return L<$[0].length?String($[0][L]):_});let Z=/%([sdijfo%])/g,Y=0,U=X.replace(Z,(_,Q)=>{if(Q==="%")return"%";if(Y>=$.length)return _;let L=$[Y++];switch(Q){case"s":return String(L);case"d":case"i":return Number(L).toString();case"j":case"o":return JSON.stringify(L,null,2);default:return _}});if(Y<$.length)U+=` ${$.slice(Y).map((_)=>typeof _==="object"?JSON.stringify(_,null,2):String(_)).join(" ")}`;return U}formatMarkdown(X){if(!X)return X;let $=X;return $=$.replace(/\[([^\]]+)\]\(([^)]+)\)/g,(Z,Y,U)=>{let _=J0.underline(J0.blue(Y)),Q=this.toAbsoluteFilePath(U);if(Q&&this.shouldStyleConsole()&&this.supportsHyperlinks()){let L=`file://${encodeURI(Q)}`,z="\x1B]8;;",j="\x1B\\";return`\x1B]8;;${L}\x1B\\${_}\x1B]8;;\x1B\\`}if(this.shouldStyleConsole()&&this.supportsHyperlinks())return`\x1B]8;;${U}\x1B\\${_}\x1B]8;;\x1B\\`;return _}),$=$.replace(/`([^`]+)`/g,(Z,Y)=>J0.bgGray(Y)),$=$.replace(/\*\*([^*]+)\*\*/g,(Z,Y)=>J0.bold(Y)),$=$.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,(Z,Y)=>J0.italic(Y)),$=$.replace(/(?<!_)_([^_]+)_(?!_)/g,(Z,Y)=>J0.italic(Y)),$=$.replace(/~([^~]+)~/g,(Z,Y)=>J0.strikethrough(Y)),$}supportsHyperlinks(){if(h0())return!1;let X=W0.env;if(!X)return!1;if(X.TERM_PROGRAM==="iTerm.app"||X.TERM_PROGRAM==="vscode"||X.TERM_PROGRAM==="WezTerm")return!0;if(X.WT_SESSION)return!0;if(X.TERM==="xterm-kitty")return!0;let $=X.VTE_VERSION?Number.parseInt(X.VTE_VERSION,10):0;if(!Number.isNaN($)&&$>=5000)return!0;return!1}toAbsoluteFilePath(X){try{let $=X;if($.startsWith("file://"))$=$.replace(/^file:\/\//,"");if($.startsWith("~")){let Z=W0.env.HOME||"";if(Z)$=$.replace(/^~(?=$|\/)/,Z)}if(mz($)||$.startsWith("./")||$.startsWith("../"))$=uz($);else return null;return _$($)?$:null}catch{return null}}buildOutputTexts(X){let $=this.shouldStyleConsole()?this.formatMarkdown(X):X,Z=X.replace(this.ANSI_PATTERN,"");return{consoleText:$,fileText:Z}}async log(X,$,...Z){if(!this.shouldLog(X))return;let Y=new Date,U=this.formatConsoleTimestamp(Y),_=this.formatFileTimestamp(Y),Q,L;if($ instanceof Error)Q=$.message,L=$.stack;else Q=this.formatMessage($,Z);let{consoleText:z,fileText:j}=this.buildOutputTexts(Q);if(this.shouldStyleConsole()){let W=this.options.showIcons===!1?"":X7[X],G=this.options.showTags!==!1&&this.name?J0.gray(this.formatTag(this.name)):"",J;switch(X){case"debug":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:J0.gray(z),level:X}),console.error(J);break;case"info":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"success":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:J0.green(z),level:X}),console.error(J);break;case"warning":J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.warn(J);break;case"error":if(J=this.formatConsoleMessage({timestamp:U,icon:W,tag:G,message:z,level:X}),console.error(J),L){let V=L.split(`
|
|
424
|
-
`);for(let F of V)if(F.trim()&&!F.includes(Q))console.error(this.formatConsoleMessage({timestamp:U,message:J0.gray(` ${F}`),level:X,showTimestamp:!1}))}break}}else if(!h0()){if(console.error(`${_} ${this.environment}.${X.toUpperCase()}: ${Q}`),L)console.error(L)}let E=`${_} ${this.environment}.${X.toUpperCase()}: ${j}
|
|
425
|
-
`;if(L)E+=`${L}
|
|
426
|
-
`;if(E=E.replace(this.ANSI_PATTERN,""),this.shouldWriteToFile())await this.writeToFile(E)}progress(X,$=""){let Z={update:(U,_)=>{},finish:(U)=>{},interrupt:(U,_)=>{}};if(!this.enabled)return Z;let Y=30;if(this.activeProgressBar={total:Math.max(1,X||1),current:0,message:$||"",barLength:Y,lastRenderedLine:""},this.shouldStyleConsole()&&!h0()&&W0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar);return{update:(U,_)=>{if(!this.enabled||!this.activeProgressBar)return;if(this.activeProgressBar.current=Math.min(Math.max(0,U),this.activeProgressBar.total),_!==void 0)this.activeProgressBar.message=_;if(this.shouldStyleConsole()&&!h0()&&W0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)},finish:(U)=>{if(!this.activeProgressBar)return;this.finishProgressBar(this.activeProgressBar,U)},interrupt:(U,_="info")=>{if(!h0()&&W0.stdout.isTTY)W0.stdout.write(`
|
|
427
|
-
`);if(this[_==="warning"?"warn":_](U),this.activeProgressBar&&this.shouldStyleConsole()&&!h0()&&W0.stdout.isTTY)this.renderProgressBar(this.activeProgressBar)}}}time(X){let $=performance.now();if(this.shouldStyleConsole()){let Z=this.options.showTags!==!1&&this.name?J0.gray(this.formatTag(this.name)):"",Y=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Y,icon:this.options.showIcons===!1?"":J0.blue("\u25D0"),tag:Z,message:`${J0.cyan(X)}...`}))}return async(Z)=>{if(!this.enabled)return;let Y=performance.now(),U=Math.round(Y-$),_=`${X} completed in ${U}ms`,Q=new Date,L=this.formatConsoleTimestamp(Q),z=`${this.formatFileTimestamp(Q)} ${this.environment}.INFO: ${_}`;if(Z)z+=` ${JSON.stringify(Z)}`;if(z+=`
|
|
428
|
-
`,z=z.replace(this.ANSI_PATTERN,""),this.shouldStyleConsole()){let j=this.options.showTags!==!1&&this.name?J0.gray(this.formatTag(this.name)):"";console.error(this.formatConsoleMessage({timestamp:L,icon:this.options.showIcons===!1?"":J0.green("\u2713"),tag:j,message:`${_}${Z?` ${JSON.stringify(Z)}`:""}`}))}else if(!h0())console.error(z.trim());if(this.shouldWriteToFile())await this.writeToFile(z)}}async debug(X,...$){await this.log("debug",X,...$)}async info(X,...$){await this.log("info",X,...$)}async success(X,...$){await this.log("success",X,...$)}async warn(X,...$){await this.log("warning",X,...$)}async error(X,...$){await this.log("error",X,...$)}validateEncryptionConfig(){if(!this.config.rotation)return!1;if(typeof this.config.rotation==="boolean")return!1;let X=this.config.rotation,{encrypt:$}=X;return!!$}async only(X){if(!this.enabled)return;return await X()}isEnabled(){return this.enabled}setEnabled(X){this.enabled=X}extend(X){let $=`${this.name}:${X}`,Z=new i$($,{...this.options,logDirectory:this.config.logDirectory,level:this.config.level,format:this.config.format,rotation:typeof this.config.rotation==="boolean"?void 0:this.config.rotation,timestamp:typeof this.config.timestamp==="boolean"?void 0:this.config.timestamp});return this.subLoggers.add(Z),Z}createReadStream(){if(h0())throw Error("createReadStream is not supported in browser environments");if(!_$(this.currentLogFile))throw Error(`Log file does not exist: ${this.currentLogFile}`);return rY(this.currentLogFile,{encoding:"utf8"})}async decrypt(X){if(!this.validateEncryptionConfig())throw Error("Encryption is not configured");let $=this.config.rotation;if(!$.encrypt||typeof $.encrypt==="boolean")throw Error("Invalid encryption configuration");if(!this.currentKeyId||!this.keys.has(this.currentKeyId))throw Error("No valid encryption key available");let Z=this.keys.get(this.currentKeyId);try{let Y=C9.isBuffer(X)?X:C9.from(X,"base64"),U=Y.subarray(0,16),_=Y.subarray(Y.length-16),Q=Y.subarray(16,Y.length-16),L=fz("aes-256-gcm",Z,U);L.setAuthTag(_);let z=L.update(Q),j=L.final(),E=z.length+j.length,W=C9.allocUnsafe(E);return z.copy(W,0),j.copy(W,z.length),W.toString("utf8")}catch(Y){throw Error(`Decryption failed: ${Y instanceof Error?Y.message:String(Y)}`)}}getLevel(){return this.config.level}getLogDirectory(){return this.config.logDirectory}getFormat(){return this.config.format}getRotationConfig(){return this.config.rotation}isBrowserMode(){return h0()}isServerMode(){return!h0()}setTestEncryptionKey(X,$){this.currentKeyId=X,this.keys.set(X,$)}getTestCurrentKey(){if(!this.currentKeyId||!this.keys.has(this.currentKeyId))return null;return{id:this.currentKeyId,key:this.keys.get(this.currentKeyId)}}getConfig(){return this.config}async box(X){if(!this.enabled)return;let $=new Date,Z=this.formatConsoleTimestamp($),Y=this.formatFileTimestamp($),{consoleText:U,fileText:_}=this.buildOutputTexts(X);if(this.shouldStyleConsole()){let L=U.split(`
|
|
429
|
-
`),z=Math.max(...L.map((G)=>G.length))+2,j=`\u250C${"\u2500".repeat(z)}\u2510`,E=`\u2514${"\u2500".repeat(z)}\u2518`,W=L.map((G)=>{return this.formatConsoleMessage({timestamp:Z,message:J0.cyan(G),showTimestamp:!1})});console.error(this.formatConsoleMessage({timestamp:Z,message:J0.cyan(j),showTimestamp:!1})),W.forEach((G)=>console.error(G)),console.error(this.formatConsoleMessage({timestamp:Z,message:J0.cyan(E),showTimestamp:!1}))}else if(!h0())console.error(`${Y} ${this.environment}.INFO: [BOX] ${_}`);let Q=`${Y} ${this.environment}.INFO: [BOX] ${_}
|
|
430
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(Q)}async prompt(X){if(h0())return Promise.resolve(!0);return new Promise(($)=>{console.error(`${J0.cyan("?")} ${X} (y/n) `);let Z=(Y)=>{let U=Y.toString().trim().toLowerCase();W0.stdin.removeListener("data",Z);try{if(typeof W0.stdin.setRawMode==="function")W0.stdin.setRawMode(!1)}catch{}W0.stdin.pause(),console.error(""),$(U==="y"||U==="yes")};try{if(typeof W0.stdin.setRawMode==="function")W0.stdin.setRawMode(!0)}catch{}W0.stdin.resume(),W0.stdin.once("data",Z)})}setFancy(X){this.fancy=X}isFancy(){return this.fancy}pause(){this.enabled=!1}resume(){this.enabled=!0}async start(X,...$){if(!this.enabled)return;let Z=X;if($&&$.length>0){let Q=/%([sdijfo%])/g,L=0;if(Z=X.replace(Q,(z,j)=>{if(j==="%")return"%";if(L>=$.length)return z;let E=$[L++];switch(j){case"s":return String(E);case"d":case"i":return Number(E).toString();case"j":case"o":return JSON.stringify(E,null,2);default:return z}}),L<$.length)Z+=` ${$.slice(L).map((z)=>typeof z==="object"?JSON.stringify(z,null,2):String(z)).join(" ")}`}let{consoleText:Y,fileText:U}=this.buildOutputTexts(Z);if(this.shouldStyleConsole()){let Q=this.options.showTags!==!1&&this.name?J0.gray(this.formatTag(this.name)):"",L=this.options.showIcons===!1?"":`${J0.blue("\u25D0")} `;console.error(`${L}${Q} ${J0.cyan(Y)}`)}let _=`[${new Date().toISOString()}] ${this.environment}.INFO: [START] ${U}
|
|
431
|
-
`.replace(this.ANSI_PATTERN,"");if(this.shouldWriteToFile())await this.writeToFile(_)}renderProgressBar(X,$=!1){if(!this.enabled||!this.shouldStyleConsole()||!W0.stdout.isTTY)return;let Z=Math.min(100,Math.max(0,Math.round(X.current/X.total*100))),Y=Math.round(X.barLength*Z/100),U=X.barLength-Y,_=J0.green("\u2501".repeat(Y)),Q=J0.gray("\u2501".repeat(U)),L=`[${_}${Q}]`,z=`${Z}%`.padStart(4),j=X.message?` ${X.message}`:"",E=this.options.showIcons===!1?"":$||Z===100?J0.green("\u2713"):J0.blue("\u25B6"),W=this.options.showTags!==!1&&this.name?` ${J0.gray(this.formatTag(this.name))}`:"",G=`\r${E}${W} ${L} ${z}${j}`,J=W0.stdout.columns||80,V=" ".repeat(Math.max(0,J-G.replace(this.ANSI_PATTERN,"").length));if(X.lastRenderedLine=`${G}${V}`,W0.stdout.write(X.lastRenderedLine),$)W0.stdout.write(`
|
|
432
|
-
`)}finishProgressBar(X,$){if(!this.enabled||!this.fancy||h0()||!W0.stdout.isTTY){this.activeProgressBar=null;return}if(X.current<X.total)X.current=X.total;if($)X.message=$;this.renderProgressBar(X,!0),this.activeProgressBar=null}async clear(X={}){if(h0()){console.warn("Log clearing is not supported in browser environments.");return}try{console.warn("Clearing logs...",this.config.logDirectory);let $=await Q$(this.config.logDirectory),Z=[];for(let Y of $){if(!(X.name?new RegExp(X.name.replace("*",".*")).test(Y):Y.startsWith(this.name))||!Y.endsWith(".log"))continue;let U=HX(this.config.logDirectory,Y);if(X.before)try{if((await MX(U)).mtime>=X.before)continue}catch(_){console.error(`Failed to get stats for file ${U}:`,_);continue}Z.push(U)}if(Z.length===0){console.warn("No log files matched the criteria for clearing.");return}console.warn(`Preparing to delete ${Z.length} log file(s)...`);for(let Y of Z)try{await z$(Y),console.warn(`Deleted log file: ${Y}`)}catch(U){console.error(`Failed to delete log file ${Y}:`,U)}console.warn("Log clearing process finished.")}catch($){console.error("Error during log clearing process:",$)}}}async function uU(X,$={}){let{maxRetries:Z=3,retryDelay:Y=1000,isRetryable:U=()=>!0,fallback:_}=$,Q=Error("Unknown error occurred");for(let L=0;L<=Z;L++)try{return await X()}catch(z){if(Q=z instanceof Error?z:Error(String(z)),L===Z||!U(Q))break;if(Y>0)await new Promise((j)=>setTimeout(j,Y))}if(_!==void 0)return _;throw Q instanceof Error?Q:Error(`Unknown error: ${String(Q)}`)}function nU(X){return X instanceof Z9}function LL(X){return X instanceof T$}function jL(X){if(nU(X))return X.code==="FILE_SYSTEM_ERROR"||X.code==="BROWSER_CONFIG_ERROR";return["ENOENT","EACCES","EMFILE","ENFILE","EBUSY","network","timeout","connection"].some(($)=>X.message.toLowerCase().includes($.toLowerCase()))}class GZ{defaultParsers;constructor(){this.defaultParsers=[{name:"boolean",canParse:(X,$)=>$==="boolean"||["true","false","1","0","yes","no"].includes(X.toLowerCase()),parse:(X)=>{let $=X.toLowerCase();return["true","1","yes"].includes($)}},{name:"number",canParse:(X,$)=>$==="number"||!Number.isNaN(Number(X))&&!Number.isNaN(Number.parseFloat(X)),parse:(X)=>{let $=Number(X);if(Number.isNaN($))throw TypeError(`Cannot parse "${X}" as number`);return $}},{name:"array",canParse:(X,$)=>$==="array"||X.startsWith("[")||X.includes(","),parse:(X)=>{try{let $=JSON.parse(X);if(Array.isArray($))return $}catch{}return X.split(",").map(($)=>$.trim())}},{name:"json",canParse:(X,$)=>$==="object"||(X.startsWith("{")&&X.endsWith("}")||X.startsWith("[")&&X.endsWith("]")),parse:(X)=>{try{return JSON.parse(X)}catch($){throw Error(`Cannot parse "${X}" as JSON: ${$}`)}}}]}async applyEnvironmentVariables(X,$,Z={}){let{prefix:Y,useCamelCase:U=!0,useBackwardCompatibility:_=!0,customParsers:Q={},verbose:L=!1,trackPerformance:z=!0}=Z,j=async()=>{if(!X)return{config:$,source:{type:"environment",priority:50,timestamp:new Date}};let E=Y||this.generateEnvPrefix(X),W={...$};return this.processObject(W,[],E,{useCamelCase:U,useBackwardCompatibility:_,customParsers:Q,verbose:L,configName:X}),{config:W,source:{type:"environment",priority:50,timestamp:new Date}}};if(z)return h8.track("applyEnvironmentVariables",j,{configName:X});return j()}generateEnvPrefix(X){return X.toUpperCase().replace(/-/g,"_")}formatEnvKey(X,$){if(!$)return X.toUpperCase();return X.replace(/([A-Z])/g,"_$1").toUpperCase()}processObject(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=Q.map((E)=>this.formatEnvKey(E,Y.useCamelCase)),z=`${Z}_${L.join("_")}`,j=Y.useBackwardCompatibility?`${Z}_${Q.map((E)=>E.toUpperCase()).join("_")}`:null;if(Y.verbose);if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.processObject(_,Q,Z,Y);else{let E=L$.env[z]||(j?L$.env[j]:void 0);if(E!==void 0){if(Y.verbose){let W=L$.env[z]?z:j}try{X[U]=this.parseEnvironmentValue(E,typeof _,z,Y.customParsers,Y.configName)}catch(W){if(W instanceof N$)throw W;throw n9.envVar(z,E,typeof _,Y.configName)}}}}}parseEnvironmentValue(X,$,Z,Y,U){for(let[_,Q]of Object.entries(Y))try{return Q(X)}catch{continue}for(let _ of this.defaultParsers)if(_.canParse(X,$))try{return _.parse(X)}catch{throw n9.envVar(Z,X,`${$} (via ${_.name} parser)`,U)}return X}getEnvironmentVariables(X){let $={},Z=X.toUpperCase();for(let[Y,U]of Object.entries(L$.env))if(Y.startsWith(Z)&&U!==void 0)$[Y]=U;return $}validateEnvironmentVariable(X,$,Z){let Y=[];if(!/^[A-Z_][A-Z0-9_]*$/.test(X))Y.push(`Environment variable key "${X}" should only contain uppercase letters, numbers, and underscores`);if(Z)try{this.parseEnvironmentValue(X,$,Z,{})}catch(U){Y.push(`Cannot parse value "${$}" as ${Z}: ${U}`)}return{isValid:Y.length===0,errors:Y}}generateEnvVarDocs(X,$,Z={}){let{prefix:Y,format:U="text"}=Z,_=Y||this.generateEnvPrefix(X),Q=[];switch(this.extractEnvVarInfo($,[],_,Q),U){case"markdown":return this.formatAsMarkdown(Q,X);case"json":return JSON.stringify(Q,null,2);default:return this.formatAsText(Q,X)}}extractEnvVarInfo(X,$,Z,Y){for(let[U,_]of Object.entries(X)){let Q=[...$,U],L=`${Z}_${Q.map((z)=>this.formatEnvKey(z,!0)).join("_")}`;if(typeof _==="object"&&_!==null&&!Array.isArray(_))this.extractEnvVarInfo(_,Q,Z,Y);else Y.push({key:L,type:Array.isArray(_)?"array":typeof _,description:`Configuration for ${Q.join(".")}`,example:this.generateExample(_)})}}generateExample(X){if(Array.isArray(X))return JSON.stringify(X);if(typeof X==="object"&&X!==null)return JSON.stringify(X);return String(X)}formatAsText(X,$){let Z=`Environment Variables for ${$}:
|
|
433
|
-
|
|
434
|
-
`;for(let Y of X)Z+=`${Y.key}
|
|
435
|
-
`,Z+=` Type: ${Y.type}
|
|
436
|
-
`,Z+=` Description: ${Y.description}
|
|
437
|
-
`,Z+=` Example: ${Y.example}
|
|
438
|
-
|
|
439
|
-
`;return Z}formatAsMarkdown(X,$){let Z=`# Environment Variables for ${$}
|
|
440
|
-
|
|
441
|
-
`;Z+=`| Variable | Type | Description | Example |
|
|
442
|
-
`,Z+=`|----------|------|-------------|----------|
|
|
443
|
-
`;for(let Y of X)Z+=`| \`${Y.key}\` | ${Y.type} | ${Y.description} | \`${Y.example}\` |
|
|
444
|
-
`;return Z}}function EL(X,$){let Z=eU("process");if(typeof Z>"u"||!Z.env)return $;let Y=Z.env[X];return Y!==void 0?Y:$}function iU(X,$,Z={}){return lU(X,$,Z,new WeakMap)}function lU(X,$,Z,Y){let{arrayMergeMode:U="replace",skipNullish:_=!1,customMerger:Q}=Z;if($===null||$===void 0)return _?X:$;if(Q){let L=Q(X,$);if(L!==void 0)return L}if(Array.isArray($)||Array.isArray(X))return sU(X,$,U,Y);if(!O9($)||!O9(X))return $;return JL(X,$,Z,Y)}function sU(X,$,Z,Y){if(Array.isArray($)&&!Array.isArray(X))return $;if(Array.isArray(X)&&!Array.isArray($))return $;if(Array.isArray($)&&Array.isArray(X))switch(Z){case"replace":return $;case"concat":return GL(X,$);case"smart":return FL(X,$,Y);default:return $}return $}function GL(X,$){let Z=[...$];for(let Y of X)if(!Z.some((U)=>g1(U,Y)))Z.push(Y);return Z}function FL(X,$,Z){if($.length===0)return X;if(X.length===0)return $;if(O9($[0])&&O9(X[0]))return OL(X,$,Z);if($.every((Y)=>typeof Y==="string")&&X.every((Y)=>typeof Y==="string")){let Y=[...$];for(let U of X)if(!Y.includes(U))Y.push(U);return Y}return $}function OL(X,$,Z){let Y=[...$];for(let U of X){if(!O9(U)){Y.push(U);continue}let _=["id","name","key","path","type"],Q=!1;for(let L of _)if(L in U){if(Y.find((z)=>O9(z)&&(L in z)&&z[L]===U[L])){Q=!0;break}}if(!Q)Y.push(U)}return Y}function JL(X,$,Z,Y){let U=$;if(O9(U)&&Y.has(U))return Y.get(U);let _={...X};if(O9(U))Y.set(U,_);for(let Q in U){if(!Object.prototype.hasOwnProperty.call(U,Q))continue;let L=U[Q],z=_[Q];if(Z.skipNullish&&(L===null||L===void 0))continue;if(L===null||L===void 0){_[Q]=L;continue}if(O9(L)&&O9(z))_[Q]=lU(z,L,Z,Y);else if(Array.isArray(L)||Array.isArray(z))_[Q]=sU(z,L,Z.arrayMergeMode||"smart",Y);else _[Q]=L}return _}function J5(X,$,Z="replace"){return iU(X,$,{arrayMergeMode:Z==="replace"?"replace":"smart",skipNullish:!0})}function g1(X,$){if(X===$)return!0;if(Array.isArray(X)&&Array.isArray($)){if(X.length!==$.length)return!1;for(let Z=0;Z<X.length;Z++)if(!g1(X[Z],$[Z]))return!1;return!0}if(O9(X)&&O9($)){let Z=Object.keys(X),Y=Object.keys($);if(Z.length!==Y.length)return!1;for(let U of Z){if(!Object.prototype.hasOwnProperty.call($,U))return!1;if(!g1(X[U],$[U]))return!1}return!0}return!1}function O9(X){return Boolean(X&&typeof X==="object"&&!Array.isArray(X))}class FZ{extensions=[".ts",".js",".mjs",".cjs",".json",".mts",".cts"];async loadFromPath(X,$,Z={}){let{arrayStrategy:Y="replace",useCache:U=!0,cacheTtl:_,trackPerformance:Q=!0,verbose:L=!1}=Z;if(U){let j=fX.getWithFileCheck("file",X);if(j){if(L)console.log(`Configuration loaded from cache: ${X}`);return j}}let z=async()=>{if(!j$(X))return null;try{let j=`?t=${Date.now()}`,E=await import(X+j),W=E.default||E,G="default"in E,J=Object.keys(E).length>0;if(!G&&!J)throw new P8(X,Error("Configuration file is empty and exports nothing"),"unknown");if(typeof W!=="object"||W===null||Array.isArray(W))throw new P8(X,Error("Configuration must export a valid object"),"unknown");let V={config:J5($,W,Y),source:{type:"file",path:X,priority:100,timestamp:new Date}};if(U)fX.setWithFileCheck("file",V,X,_);return V}catch(j){throw j instanceof Error?n9.configLoad(X,j):n9.configLoad(X,Error(String(j)))}};if(Q)return h8.track("loadFromPath",z,{path:X});return z()}async tryLoadFromPaths(X,$,Z={}){for(let Y of X)try{let U=await this.loadFromPath(Y,$,Z);if(U)return U}catch(U){if(U instanceof Error&&U.name==="ConfigLoadError")throw U;if(Z.verbose)console.warn(`Failed to load config from ${Y}:`,U)}return null}generateConfigPaths(X,$,Z){let Y=this.generateNamePatterns(X,Z),U=[];for(let _ of Y)for(let Q of this.extensions)U.push(sZ($,`${_}${Q}`));return U}generateNamePatterns(X,$){let Z=[];if(Z.push("config",".config"),X)Z.push(X,`.${X}.config`,`${X}.config`,`.${X}`);let Y=$===void 0?[]:Array.isArray($)?$:[$];for(let _ of Y){if(!_)continue;if(Z.push(_,`.${_}.config`,`${_}.config`,`.${_}`),X)Z.push(`${X}.${_}.config`,`.${X}.${_}.config`)}let U=new Set;return Z.filter((_)=>{if(!_||U.has(_))return!1;return U.add(_),!0})}checkFileAccess(X){return uU(async()=>{return j$(X)},{maxRetries:2,retryDelay:100,fallback:!1})}async discoverConfigFiles(X,$,Z){let Y=[];if(!j$(X))return Y;if($||Z){let U=this.generateNamePatterns($||"",Z);for(let _ of U)for(let Q of this.extensions){let L=sZ(X,`${_}${Q}`);if(await this.checkFileAccess(L))Y.push(L)}}else try{let{readdirSync:U}=await import("fs"),_=U(X);for(let Q of _)if(this.looksLikeConfigFile(Q)){let L=sZ(X,Q);if(await this.checkFileAccess(L))Y.push(L)}}catch{return[]}return Y}looksLikeConfigFile(X){return[/\.config\.(ts|js|mjs|cjs|json|mts|cts)$/,/^\..*\.(ts|js|mjs|cjs|json|mts|cts)$/,/config\.(ts|js|mjs|cjs|json|mts|cts)$/].some(($)=>$.test(X))}async validateConfigFile(X){let $=[];try{if(!j$(X))return $.push("Configuration file does not exist"),$;let Z=await import(X),Y=Z.default||Z;if(Y===void 0)$.push("Configuration file must export a default value or named exports");else if(typeof Y!=="object"||Y===null)$.push("Configuration must be an object");else if(Array.isArray(Y))$.push("Configuration cannot be an array at the root level");if(X.endsWith(".json"))try{let{readFileSync:U}=await import("fs"),_=U(X,"utf8");JSON.parse(_)}catch(U){$.push(`Invalid JSON syntax: ${U}`)}}catch(Z){$.push(`Failed to load configuration file: ${Z}`)}return $}async getFileModificationTime(X){try{let{statSync:$}=await import("fs");return $(X).mtime}catch{return null}}async preloadConfigurations(X,$={}){let Z=new Map;return await Promise.allSettled(X.map(async(Y)=>{try{let U=await this.loadFromPath(Y,{},$);if(U)Z.set(Y,U.config)}catch(U){if($.verbose)console.warn(`Failed to preload ${Y}:`,U)}})),Z}}class W5{async validateConfiguration(X,$,Z={}){let{stopOnFirstError:Y=!1,validateRequired:U=!0,validateTypes:_=!0,customRules:Q=[],trackPerformance:L=!0,verbose:z=!1}=Z,j=async()=>{let E=[],W=[],G={stopOnFirstError:Y,validateRequired:U,validateTypes:_,customRules:Q,trackPerformance:L,verbose:z};try{if(typeof $==="string")return await this.validateWithSchemaFile(X,$,G);else if(Array.isArray($))return this.validateWithRules(X,[...$,...Q],G);else return this.validateWithJSONSchema(X,$,G)}catch(J){return E.push({path:"",message:`Validation failed: ${J}`,rule:"system"}),{isValid:!1,errors:E,warnings:W}}};if(L)return await h8.track("validateConfiguration",j);return j()}async validateWithSchemaFile(X,$,Z){try{if(!iz($))throw new T8($,[{path:"",message:"Schema file does not exist"}]);let Y=await import($),U=Y.default||Y;if(Array.isArray(U))return this.validateWithRules(X,U,Z);else return this.validateWithJSONSchema(X,U,Z)}catch(Y){throw new T8($,[{path:"",message:`Failed to load schema: ${Y}`}])}}validateWithJSONSchema(X,$,Z){let Y=[],U=[];return this.validateObjectAgainstSchema(X,$,"",Y,U,Z),{isValid:Y.length===0,errors:Y,warnings:U}}validateObjectAgainstSchema(X,$,Z,Y,U,_){if(_.validateTypes&&$.type){let Q=Array.isArray(X)?"array":typeof X,L=Array.isArray($.type)?$.type:[$.type];if(!L.includes(Q)){if(Y.push({path:Z,message:`Expected type ${L.join(" or ")}, got ${Q}`,expected:L.join(" or "),actual:Q,rule:"type"}),_.stopOnFirstError)return}}if($.enum&&!$.enum.includes(X)){if(Y.push({path:Z,message:`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"}),_.stopOnFirstError)return}if(typeof X==="string"){if($.minLength!==void 0&&X.length<$.minLength)Y.push({path:Z,message:`String length must be at least ${$.minLength}`,expected:`>= ${$.minLength}`,actual:X.length,rule:"minLength"});if($.maxLength!==void 0&&X.length>$.maxLength)Y.push({path:Z,message:`String length must not exceed ${$.maxLength}`,expected:`<= ${$.maxLength}`,actual:X.length,rule:"maxLength"});if($.pattern){if(!new RegExp($.pattern).test(X))Y.push({path:Z,message:`String does not match pattern ${$.pattern}`,expected:$.pattern,actual:X,rule:"pattern"})}}if(typeof X==="number"){if($.minimum!==void 0&&X<$.minimum)Y.push({path:Z,message:`Value must be at least ${$.minimum}`,expected:`>= ${$.minimum}`,actual:X,rule:"minimum"});if($.maximum!==void 0&&X>$.maximum)Y.push({path:Z,message:`Value must not exceed ${$.maximum}`,expected:`<= ${$.maximum}`,actual:X,rule:"maximum"})}if(Array.isArray(X)&&$.items)for(let Q=0;Q<X.length;Q++){let L=Z?`${Z}[${Q}]`:`[${Q}]`;if(this.validateObjectAgainstSchema(X[Q],$.items,L,Y,U,_),_.stopOnFirstError&&Y.length>0)return}if(X&&typeof X==="object"&&!Array.isArray(X)){let Q=X;if(_.validateRequired&&$.required){for(let L of $.required)if(!(L in Q)){if(Y.push({path:Z?`${Z}.${L}`:L,message:`Missing required property '${L}'`,expected:"required",rule:"required"}),_.stopOnFirstError)return}}if($.properties){for(let[L,z]of Object.entries($.properties))if(L in Q){let j=Z?`${Z}.${L}`:L;if(this.validateObjectAgainstSchema(Q[L],z,j,Y,U,_),_.stopOnFirstError&&Y.length>0)return}}if($.additionalProperties===!1){let L=new Set(Object.keys($.properties||{}));for(let z of Object.keys(Q))if(!L.has(z))U.push({path:Z?`${Z}.${z}`:z,message:`Additional property '${z}' is not allowed`,rule:"additionalProperties"})}}}validateWithRules(X,$,Z){let Y=[],U=[];for(let _ of $)try{let Q=this.getValueByPath(X,_.path),L=this.validateWithRule(Q,_,_.path);if(Y.push(...L),Z.stopOnFirstError&&Y.length>0)break}catch(Q){Y.push({path:_.path,message:`Rule validation failed: ${Q}`,rule:"system"})}return{isValid:Y.length===0,errors:Y,warnings:U}}validateWithRule(X,$,Z){let Y=[];if($.required&&(X===void 0||X===null))return Y.push({path:Z,message:$.message||`Property '${Z}' is required`,expected:"required",rule:"required"}),Y;if(X===void 0||X===null)return Y;if($.type){let U=Array.isArray(X)?"array":typeof X;if(U!==$.type)Y.push({path:Z,message:$.message||`Expected type ${$.type}, got ${U}`,expected:$.type,actual:U,rule:"type"})}if($.min!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U<$.min)Y.push({path:Z,message:$.message||`Value must be at least ${$.min}`,expected:`>= ${$.min}`,actual:U,rule:"min"})}if($.max!==void 0){let U=Array.isArray(X)?X.length:typeof X==="string"?X.length:typeof X==="number"?X:0;if(U>$.max)Y.push({path:Z,message:$.message||`Value must not exceed ${$.max}`,expected:`<= ${$.max}`,actual:U,rule:"max"})}if($.pattern&&typeof X==="string"){if(!$.pattern.test(X))Y.push({path:Z,message:$.message||`Value does not match pattern ${$.pattern}`,expected:$.pattern.toString(),actual:X,rule:"pattern"})}if($.enum&&!$.enum.includes(X))Y.push({path:Z,message:$.message||`Value must be one of: ${$.enum.join(", ")}`,expected:$.enum.join(", "),actual:X,rule:"enum"});if($.validator){let U=$.validator(X);if(U)Y.push({path:Z,message:$.message||U,rule:"custom"})}return Y}getValueByPath(X,$){if(!$)return X;let Z=$.split("."),Y=X;for(let U of Z)if(Y&&typeof Y==="object"&&U in Y)Y=Y[U];else return;return Y}generateRulesFromInterface(X){let $=[],Z=X.matchAll(/(\w+)(\?)?:\s*(\w+)/g);for(let Y of Z){let[,U,_,Q]=Y;$.push({path:U,required:!_,type:this.mapTypeScriptType(Q)})}return $}mapTypeScriptType(X){switch(X.toLowerCase()){case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"object":return"object";default:return"object"}}static createCommonRules(){return{server:[{path:"port",required:!0,type:"number",min:1,max:65535},{path:"host",required:!0,type:"string",min:1},{path:"ssl",type:"boolean"}],database:[{path:"url",required:!0,type:"string",min:1},{path:"pool",type:"number",min:1,max:100},{path:"timeout",type:"number",min:0}],api:[{path:"baseUrl",required:!0,type:"string",pattern:$7},{path:"timeout",type:"number",min:0},{path:"retries",type:"number",min:0,max:10}]}}}function WL(X){if(!X)return"";let $=Array.isArray(X)?X.filter(Boolean):[X];if($.length===0)return"";if($.length===1)return` or alias "${$[0]}"`;return` or aliases ${$.map((Z)=>`"${Z}"`).join(", ")}`}class d1{fileLoader=new FZ;envProcessor=new GZ;validator=new W5;async loadConfig(X){let $=Date.now(),{cache:Z,performance:Y,schema:U,validate:_,...Q}=X;try{if(Z?.enabled){let z=this.checkCache(Q.name||"",Q);if(z)return z}let L;try{L=await this.loadConfigurationStrategies(Q,!0,Z)}catch(z){let j=Q.__strictErrorHandling;if(z instanceof Error&&z.name==="ConfigNotFoundError"){if(j)throw z;L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`No configuration file found for "${Q.name||"config"}", using defaults with environment variables`]}}else if(z instanceof Error&&z.name==="ConfigLoadError"){let E=z.message.includes("EACCES")||z.message.includes("EPERM")||z.message.includes("permission denied"),W=!E&&(z.message.includes("syntax")||z.message.includes("Expected")||z.message.includes("Unexpected")||z.message.includes("BuildMessage")||z.message.includes("errors building")),G=z.message.includes("Configuration must export a valid object")||z.message.includes("Configuration file is empty and exports nothing");if(j&&(G||E))throw z;if(W&&(!j||!G))L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:["Configuration file has syntax errors, using defaults with environment variables"]};else if(!j)L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading error, using defaults: ${z.message}`]};else throw z}else L={...await this.applyEnvironmentVariables(Q.name||"",Q.defaultConfig,Q.checkEnv!==!1,Q.verbose||!1),warnings:[`Configuration loading failed, using defaults: ${z instanceof Error?z.message:String(z)}`]}}if(U||_)await this.validateConfiguration(L.config,U,_,Q.name);if(Z?.enabled&&L)this.cacheResult(Q.name||"",L,Z,Q);if(Y?.enabled){let z={operation:"loadConfig",duration:Date.now()-$,configName:Q.name,timestamp:new Date};if(Y.onMetrics)Y.onMetrics(z);if(Y.slowThreshold&&z.duration>Y.slowThreshold)j9.warn(`Slow configuration loading detected: ${z.duration}ms for ${Q.name}`);L.metrics=z}return L}catch(L){let z=Date.now()-$;throw j9.error(`Configuration loading failed after ${z}ms:`,[L instanceof Error?L:Error(String(L))]),L}}async loadConfigurationStrategies(X,$=!1,Z){let{name:Y="",alias:U,cwd:_,configDir:Q,defaultConfig:L,checkEnv:z=!0,arrayStrategy:j="replace",verbose:E=!1}=X,W=_||$X.cwd(),G=[],J=await this.loadLocalConfiguration(Y,U,W,Q,L,j,E,z,Z);if(J)return G.push(...this.getLocalSearchPaths(Y,U,W,Q)),this.finalizeResult(J,G,z,Y,E);let V=await this.loadHomeConfiguration(Y,U,L,j,E,z);if(V)return G.push(...this.getHomeSearchPaths(Y,U)),this.finalizeResult(V,G,z,Y,E);let F=await this.loadPackageJsonConfiguration(Y,U,W,L,j,E,z);if(F)return G.push(r0(W,"package.json")),this.finalizeResult(F,G,z,Y,E);if(G.push(...this.getAllSearchPaths(Y,U,W,Q)),$)throw n9.configNotFound(Y,G,U);return{...await this.applyEnvironmentVariables(Y,L,z,E),warnings:[`No configuration file found for "${Y}"${WL(U)}, using defaults with environment variables`]}}async loadLocalConfiguration(X,$,Z,Y,U,_,Q,L,z){let j=L?X8(X,U,Q):U,E=this.getLocalDirectories(Z,Y);for(let W of E){if(Q)j9.info(`Searching for configuration in: ${W}`);let G=this.fileLoader.generateConfigPaths(X,W,$),J=await this.fileLoader.tryLoadFromPaths(G,j,{arrayStrategy:_,verbose:Q,cacheTtl:z?.ttl,useCache:!z?.ttl||z.ttl>100});if(J){if(Q)j9.success(`Configuration loaded from: ${J.source.path}`);return J}}return null}async loadHomeConfiguration(X,$,Z,Y,U,_){if(!X)return null;let Q=_?X8(X,Z,U):Z,L=[r0(wX(),".config",X),r0(wX(),".config"),wX()];for(let z of L){if(U)j9.info(`Checking home directory: ${z}`);let j=this.fileLoader.generateConfigPaths(X,z,$),E=await this.fileLoader.tryLoadFromPaths(j,Q,{arrayStrategy:Y,verbose:U});if(E){if(U)j9.success(`Configuration loaded from home directory: ${E.source.path}`);return E}}return null}async loadPackageJsonConfiguration(X,$,Z,Y,U,_,Q){let L=Q?X8(X,Y,_):Y;try{let z=r0(Z,"package.json");if(!v1(z))return null;let j={};try{j=JSON.parse(oz(z,"utf8"))}catch(G){if(_)j9.warn("Failed to parse package.json:",[G instanceof Error?G:Error(String(G))]);return null}let E=j[X],W=X;if(!E&&$){let G=Array.isArray($)?$:[$];for(let J of G){if(!J)continue;if(j[J]){E=j[J],W=J;break}}}if(E&&typeof E==="object"&&!Array.isArray(E)){if(_)j9.success(`Configuration loaded from package.json: ${W}`);return{config:J5(L,E,U),source:{type:"package.json",path:z,priority:30,timestamp:new Date}}}}catch(z){if(_)j9.warn("Failed to load package.json:",[z instanceof Error?z:Error(String(z))])}return null}async applyEnvironmentVariables(X,$,Z,Y){if(!Z||!X||typeof $!=="object"||$===null||Array.isArray($))return{config:$,source:{type:"default",priority:10,timestamp:new Date}};return{config:X8(X,$,Y),source:{type:"environment",priority:20,timestamp:new Date}}}async finalizeResult(X,$,Z,Y,U){return{config:X.config,source:X.source,path:X.source.path}}async validateConfiguration(X,$,Z,Y){let U=[];if(Z){let _=Z(X);if(_)U.push(..._)}if($){let _=await this.validator.validateConfiguration(X,$);if(!_.isValid)U.push(..._.errors.map((Q)=>Q.path?`${Q.path}: ${Q.message}`:Q.message))}if(U.length>0)throw n9.configValidation(Y||"unknown",U,Y)}checkCache(X,$){let Z=this.generateCacheKey(X,$);return fX.get(Z)||null}cacheResult(X,$,Z,Y){let U=this.generateCacheKey(X,Y);fX.set(U,$,void 0,Z.ttl)}generateCacheKey(X,$){let Z=[X];if($.alias){let Y=Array.isArray($.alias)?$.alias.join(","):$.alias;Z.push(`alias:${Y}`)}if($.cwd)Z.push(`cwd:${$.cwd}`);if($.configDir)Z.push(`configDir:${$.configDir}`);if("checkEnv"in $)Z.push(`checkEnv:${$.checkEnv}`);return Z.join("|")}getLocalDirectories(X,$){return Array.from(new Set([X,r0(X,"config"),r0(X,".config"),$?r0(X,$):void 0].filter(Boolean)))}getAllSearchPaths(X,$,Z,Y){let U=[];return U.push(...this.getLocalSearchPaths(X,$,Z,Y)),U.push(...this.getHomeSearchPaths(X,$)),U.push(r0(Z,"package.json")),U}getLocalSearchPaths(X,$,Z,Y){let U=this.getLocalDirectories(Z,Y),_=[];for(let Q of U)_.push(...this.fileLoader.generateConfigPaths(X,Q,$));return _}getHomeSearchPaths(X,$){if(!X)return[];let Z=[r0(wX(),".config",X),r0(wX(),".config"),wX()],Y=[];for(let U of Z)Y.push(...this.fileLoader.generateConfigPaths(X,U,$));return Y}async loadConfigWithResult(X){return this.loadConfig(X)}}function U6(X){let $=!(X.message.includes("EACCES")||X.message.includes("EPERM")||X.message.includes("permission denied"))&&(X.message.includes("syntax")||X.message.includes("Expected")||X.message.includes("Unexpected")||X.message.includes("BuildMessage")),Z=X.message.includes("Configuration must export a valid object")||X.message.includes("Configuration file is empty and exports nothing");return $||Z}async function VL(X){return B9.loadConfig({...X,__strictErrorHandling:!0})}async function V5(X){let $="defaultConfig"in X&&X.defaultConfig!==void 0?X.defaultConfig:{},Z="cache"in X||"performance"in X||"schema"in X||"validate"in X;try{let Y;if(Z)Y=await B9.loadConfig(X);else Y=await B9.loadConfig({...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}});return Y?.config??$}catch(Y){let U=Y instanceof Error?Y.name:"UnknownError",_=Y instanceof Error?Y.message:String(Y);if(!(U==="ConfigNotFoundError"||U==="ConfigLoadError"||U==="ConfigValidationError"||_.includes("config"))&&X.verbose)j9.warn("Unexpected error loading config, using defaults:",[Y instanceof Error?Y:Error(String(Y))]);let Q=Z?{...X,defaultConfig:$}:{...X,defaultConfig:$,cache:{enabled:!0},performance:{enabled:!1}};if("checkEnv"in X?X.checkEnv!==!1:!0)return(await B9.applyEnvironmentVariables(Q.name||"",$,!0,Q.verbose||!1))?.config??$;return $}}async function IL(X={defaultConfig:{}}){if(typeof X==="string"){let{cwd:$}=await import("process");try{return(await B9.loadConfig({name:X,cwd:$(),generatedDir:"./generated",configDir:"./config",defaultConfig:{},checkEnv:!0,arrayStrategy:"replace"})).config}catch(Z){if(Z instanceof Error&&(Z.name==="ConfigNotFoundError"||Z.name==="ConfigLoadError"&&U6(Z)))return(await B9.applyEnvironmentVariables(X,{},!0,!1)).config;throw Z}}try{return(await B9.loadConfig({...X,cwd:X.cwd||$X.cwd(),cache:{enabled:!0},performance:{enabled:!1}})).config}catch($){if($ instanceof Error&&($.name==="ConfigNotFoundError"||$.name==="ConfigLoadError"&&U6($)))return(await B9.applyEnvironmentVariables(X.name||"",X.defaultConfig||{},X.checkEnv!==!1,X.verbose||!1)).config;throw $}}async function RL(X,$,Z="replace"){let Y=new FZ;try{let U=await Y.loadFromPath(X,$,{arrayStrategy:Z,useCache:!1,trackPerformance:!1});return U?U.config:null}catch{return null}}function X8(X,$,Z=!1){let Y=new GZ,U=X.toUpperCase().replace(/[^A-Z0-9]/g,"_");function _(Q,L=[]){let z={...Q};for(let[j,E]of Object.entries(Q)){let W=[...L,j],G=[`${U}_${W.join("_").toUpperCase()}`,`${U}_${W.map((F)=>F.toUpperCase()).join("")}`,`${U}_${W.map((F)=>F.replace(/([A-Z])/g,"_$1").toUpperCase()).join("")}`],J,V;for(let F of G)if(J=$X.env[F],J!==void 0){V=F;break}if(J!==void 0&&V)if(typeof E==="boolean")z[j]=["true","1","yes"].includes(J.toLowerCase());else if(typeof E==="number"){let F=Number(J);if(!Number.isNaN(F))z[j]=F}else if(Array.isArray(E))try{z[j]=JSON.parse(J)}catch{z[j]=J.split(",").map((F)=>F.trim())}else z[j]=J;else if(E&&typeof E==="object"&&!Array.isArray(E))z[j]=_(E,W)}return z}return _($)}function KL(X){let $=r0($X.cwd(),X.configDir),Z=r0($X.cwd(),X.generatedDir),Y=r0(Z,"config-types.ts");if(!v1(Z6(Y)))lz(Z6(Y),{recursive:!0,mode:511});let U=v1($)?sz($).map((Q)=>Q.replace(/\.(ts|js|mjs|cjs|mts|cts|json)$/,"")).sort():[],_=`// Generated by bunfig v${cL}
|
|
445
|
-
export type ConfigNames = ${U.length?`'${U.join("' | '")}'`:"string"}
|
|
446
|
-
`;rz(Y,_,{mode:438})}function DL(X){let $=null,Z=null,Y=()=>{if(!Z)Z=V5(X).then((_)=>{return $=_,_},(_)=>{let Q="defaultConfig"in X?X.defaultConfig:{};if($=Q,"verbose"in X&&X.verbose)j9.warn("Config loading failed, using defaults:",[_ instanceof Error?_:Error(String(_))]);return Q});return Z},U="defaultConfig"in X?X.defaultConfig:{};return $=U,Y(),new Proxy({},{get(_,Q){if($)return $[Q];let L=U[Q];return Y(),L},has(_,Q){return Q in($||U)},ownKeys(){return Object.keys($||U)},getOwnPropertyDescriptor(_,Q){return Object.getOwnPropertyDescriptor($||U,Q)},set(_,Q,L){if(!$)$={...U};return $[Q]=L,!0}})}function ML(X){let $=Y6(ez.cwd(),X?.configDir||"./config");function Z(){if(!az($))return[];let U=new Set([".ts",".js",".mjs",".cjs",".mts",".cts",".json"]),_=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"],Q=tz($).filter((z)=>U.has(oZ(z))).map((z)=>({base:z.replace(/\.(?:ts|js|mjs|cjs|mts|cts|json)$/i,""),file:z})),L=new Map;for(let{base:z,file:j}of Q){let E=oZ(j).toLowerCase(),W=L.get(z);if(!W){L.set(z,j);continue}let G=oZ(W).toLowerCase();if(_.indexOf(E)<_.indexOf(G))L.set(z,j)}return Array.from(L.entries()).map(([z,j])=>({base:z,file:j})).sort((z,j)=>z.base.localeCompare(j.base))}function Y(){let U=Z(),_=U.map((z)=>z.base),Q=_.length?_.map((z)=>`'${z}'`).join(" | "):"string",L=U.length?`{
|
|
447
|
-
${U.map((z)=>{let j=Y6($,z.file).replace(/\\/g,"/");return` '${z.base}': typeof import('${j}').default`}).join(`,
|
|
448
|
-
`)}
|
|
449
|
-
}`:"Record<string, any>";return`export type ConfigNames = ${Q}
|
|
450
|
-
export type ConfigByName = ${L}
|
|
451
|
-
export type Config<N extends ConfigNames> = N extends keyof ConfigByName ? ConfigByName[N] : unknown
|
|
452
|
-
export type ConfigOf = Config
|
|
453
|
-
`}return{name:"bunfig-plugin",setup(U){U.onResolve({filter:/^virtual:bunfig-types$/},(_)=>{return{path:_.path,namespace:"bunfig-virtual"}}),U.onLoad({filter:/^virtual:bunfig-types$/,namespace:"bunfig-virtual"},()=>{return{contents:Y(),loader:"ts"}})}}}async function HL(){if(!E1)E1=await V5({name:"faker",alias:"mock",defaultConfig:YZ});return E1}function kX(X){let $=X.replace(/-/g,"_").split("_"),Z=$[0].toLowerCase(),Y=$[1]?.toUpperCase(),U=Y?`${Z}-${Y.toLowerCase()}`:Z;return{full:X,language:Z,region:Y,packageName:U,normalized:Y?`${Z}_${Y}`:Z}}function CL(X){let $=kX(X);if($.region)return[$.normalized,$.language];return[$.language]}function wL(X){return`@mock-locale/${kX(X).packageName}`}function oU(X,$){let Z={...X};for(let Y in $){let U=$[Y],_=X[Y];if(U===void 0)continue;if(typeof U==="object"&&U!==null&&!Array.isArray(U)&&typeof _==="object"&&_!==null&&!Array.isArray(_))Z[Y]=oU(_,U);else Z[Y]=U}return Z}function xX(){let X=cU.cwd(),$=AX(X,"package.json");if(!SX($))return!1;try{let Z=JSON.parse($L($,"utf-8"));return!!(Z.workspaces||Z.workspace)}catch{return!1}}function rU(){let X=cU.cwd();if(SX(AX(X,"bun.lockb"))||SX(AX(X,"bun.lock")))return"bun";if(SX(AX(X,"pnpm-lock.yaml")))return"pnpm";if(SX(AX(X,"yarn.lock")))return"yarn";if(SX(AX(X,"package-lock.json")))return"npm";return"bun"}function aU(X,$={}){let Z=rU(),{silent:Y=!1}=$;if(!Y)console.log(`
|
|
454
|
-
\uD83D\uDCE6 Installing ${X} using ${Z}...`);let U={bun:{cmd:"bun",args:["add",X]},npm:{cmd:"npm",args:["install",X]},yarn:{cmd:"yarn",args:["add",X]},pnpm:{cmd:"pnpm",args:["add",X]}},{cmd:_,args:Q}=U[Z];try{let L=XL(_,Q,{stdio:"pipe",shell:!0}),z=L.stdout?.toString()||"",j=L.stderr?.toString()||"",E=z+j;if(!Y){if(z)console.log(z);if(j)console.error(j)}if(L.status===0){if(!Y)console.log(`\u2713 Successfully installed ${X}`);return!0}else{let W=E;if(W.toLowerCase().includes("dependency loop")||W.includes("DependencyLoop")||W.includes("has a dependency loop")||W.includes("An internal error occurred (DependencyLoop)")){if(!Y){if(console.log(`
|
|
455
|
-
\u26A0\uFE0F Package ${X} is already available in the workspace and cannot be installed separately due to a dependency loop.`),xX())console.log(" This is expected when running in a workspace environment. The package should be available for import.")}return!0}if(!Y)console.error(`\u2717 Failed to install ${X}`);return!1}}catch(L){if(!Y)console.error(`\u2717 Error installing ${X}:`,L);return!1}}function B8(X,$){let Z=[];for(let Y of $.rules)if(!Y.validator(X)){let U=Y.errorMessage||`Validation failed for value: ${X}`;if(Z.push(U),$.strict)throw Error(U)}return{isValid:Z.length===0,errors:Z}}function y8(X,$){let{items:Z}=$;if(Z.length===0)throw Error("Cannot select from empty weighted items array");let Y=Z.reduce((Q,L)=>Q+L.weight,0);if(Y<=0)throw Error("Total weight must be greater than 0");let U=X.number()*Y,_=0;for(let Q of Z)if(_+=Q.weight,U<=_)return Q.item;return Z[Z.length-1].item}function qL(X,$){return X.filter((Z)=>{if($.gender&&Z.gender&&Z.gender!==$.gender)return!1;if($.country){let Y=Array.isArray($.country)?$.country:[$.country];if(Z.country&&!Y.includes(Z.country))return!1}if($.region){let Y=Array.isArray($.region)?$.region:[$.region];if(Z.region&&!Y.includes(Z.region))return!1}if($.locale&&Z.locale&&Z.locale!==$.locale)return!1;if($.ageRange&&Z.age){let{min:Y,max:U}=$.ageRange;if(Z.age<Y||Z.age>U)return!1}for(let[Y,U]of Object.entries($))if(Y!=="gender"&&Y!=="country"&&Y!=="region"&&Y!=="locale"&&Y!=="ageRange"&&Z[Y]!==void 0){if(!(Array.isArray(U)?U:[U]).includes(Z[Y]))return!1}return!0})}function c9(X,$){let Z={...X};for(let Y of $){let{field:U,dependsOn:_,mapping:Q}=Y;if(Z[_]&&Q[Z[_]])Z[U]=Q[Z[_]]}return Z}function PL(X,$={}){let Z=X();if($.relationships)return c9(Z,$.relationships);return Z}class I5{providers=new Map;register(X){let{category:$,name:Z}=X;if(!this.providers.has($))this.providers.set($,new Map);this.providers.get($).set(Z,X)}get(X,$){return this.providers.get(X)?.get($)}getProvidersInCategory(X){let $=this.providers.get(X);return $?Array.from($.values()):[]}getCategories(){return Array.from(this.providers.keys())}remove(X,$){let Z=this.providers.get(X);if(Z)return Z.delete($);return!1}clear(){this.providers.clear()}}class L8{random;locale;constructor(X,$){this.random=X,this.locale=$}street(){let X=this.random.arrayElement(this.locale.address.street),$=this.streetSuffix();return`${X} ${$}`}streetSuffix(){return this.random.arrayElement(this.locale.address.streetSuffix??["Street","Avenue","Road","Boulevard","Drive","Lane","Way"])}streetAddress(X){let $=this.buildingNumber(),Z=this.street();if(X?.useFullAddress)return`${$} ${Z}, ${this.city()}, ${this.stateAbbr()} ${this.zipCode()}`;return`${$} ${Z}`}buildingNumber(){let X=this.random.arrayElement(this.locale.address.buildingNumber??["#","##","###"]);return this.random.replaceSymbols(X)}city(){return this.random.arrayElement(this.locale.address.city)}state(){return this.random.arrayElement(this.locale.address.state)}stateAbbr(){return this.random.arrayElement(this.locale.address.stateAbbr??[])}country(){return this.random.arrayElement(this.locale.address.country)}countryCode(){return this.random.arrayElement(this.locale.address.countryCode??[])}zipCode(){let X=this.random.arrayElement(this.locale.address.zipCode);return this.random.replaceSymbols(X)}direction(){return this.random.arrayElement(this.locale.address.direction??["North","South","East","West"])}latitude(X){let $=X?.min??-90,Z=X?.max??90,Y=X?.precision??4;return this.random.float($,Z,Y)}longitude(X){let $=X?.min??-180,Z=X?.max??180,Y=X?.precision??4;return this.random.float($,Z,Y)}address(){return this.streetAddress({useFullAddress:!0})}cityAdvanced(X){let $;if(X?.constraints?.country){let Z=X.constraints.country,Y=Array.isArray(Z)?Z:[Z];$=this.city()}else $=this.city();if(X?.weighted)$=y8(this.random,X.weighted);if(X?.relationships)$=c9({city:$,country:X?.constraints?.country},X.relationships).city||$;if(X?.validation){let Z=B8($,X.validation);if(!Z.isValid){if(X.validation.strict)throw Error(`Validation failed: ${Z.errors.join(", ")}`);$=this.city()}}return $}countryAdvanced(X){let $;if(X?.constraints?.country){let Z=X.constraints.country,Y=Array.isArray(Z)?Z:[Z];$=this.random.arrayElement(Y)}else $=this.country();if(X?.weighted)$=y8(this.random,X.weighted);if(X?.relationships)$=c9({country:$},X.relationships).country||$;if(X?.validation){let Z=B8($,X.validation);if(!Z.isValid){if(X.validation.strict)throw Error(`Validation failed: ${Z.errors.join(", ")}`);$=this.country()}}return $}addressAdvanced(X){let $=this.countryAdvanced(X),Z=this.cityAdvanced(X),Y=this.state(),U=this.stateAbbr(),_=this.zipCode(),Q=this.street(),L=this.latitude(),z=this.longitude(),j={street:Q,city:Z,state:Y,stateAbbr:U,country:$,countryCode:this.countryCode(),zipCode:_,latitude:L,longitude:z};if(X?.relationships)return c9(j,X.relationships);return j}neighborhood(X){let $=X?.size||this.random.int(3,10),Z=this.cityAdvanced(X),Y=this.state(),U=this.zipCode(),_=[];for(let Q=0;Q<$;Q++)_.push({street:this.street(),city:Z,state:Y,zipCode:U,latitude:this.latitude({min:this.latitude()-0.01,max:this.latitude()+0.01}),longitude:this.longitude({min:this.longitude()-0.01,max:this.longitude()+0.01})});return _}}class j8{random;locale;constructor(X,$){this.random=X,this.locale=$}type(){if(this.locale?.animal?.type)return this.random.arrayElement(this.locale.animal.type);let X=["Mammal","Bird","Reptile","Amphibian","Fish","Invertebrate","Insect","Arachnid"];return this.random.arrayElement(X)}dog(){if(this.locale?.animal?.dog)return this.random.arrayElement(this.locale.animal.dog);let X=["Golden Retriever","Labrador Retriever","German Shepherd","Bulldog","Beagle","Poodle","Rottweiler","Yorkshire Terrier","Boxer","Dachshund","Siberian Husky","Great Dane","Doberman Pinscher","Australian Shepherd","Cavalier King Charles Spaniel","Shih Tzu","Boston Terrier","Pomeranian","Havanese","Shetland Sheepdog","Bernese Mountain Dog","English Springer Spaniel","Brittany","Pug","Cocker Spaniel","Border Collie"];return this.random.arrayElement(X)}cat(){if(this.locale?.animal?.cat)return this.random.arrayElement(this.locale.animal.cat);let X=["Persian","Maine Coon","Ragdoll","British Shorthair","Siamese","Scottish Fold","Sphynx","Abyssinian","Devon Rex","American Shorthair","Bengal","Russian Blue","Birman","Oriental Shorthair","Norwegian Forest Cat","Cornish Rex","Himalayan","Exotic Shorthair","Burmese","Turkish Angora","Somali","Manx","Tonkinese"];return this.random.arrayElement(X)}bird(){if(this.locale?.animal?.bird)return this.random.arrayElement(this.locale.animal.bird);let X=["Eagle","Hawk","Falcon","Owl","Parrot","Macaw","Cockatoo","Parakeet","Canary","Finch","Sparrow","Robin","Blue Jay","Cardinal","Crow","Raven","Pigeon","Dove","Hummingbird","Woodpecker","Pelican","Swan","Duck","Goose","Flamingo","Penguin","Ostrich","Emu","Peacock","Turkey","Chicken","Rooster"];return this.random.arrayElement(X)}fish(){if(this.locale?.animal?.fish)return this.random.arrayElement(this.locale.animal.fish);let X=["Goldfish","Betta","Guppy","Angelfish","Neon Tetra","Molly","Platy","Swordtail","Clownfish","Tang","Damselfish","Lionfish","Grouper","Snapper","Tuna","Marlin","Swordfish","Shark","Ray","Barracuda","Catfish","Bass","Pike","Trout","Carp"];return this.random.arrayElement(X)}bear(){let X=["Grizzly Bear","Black Bear","Polar Bear","Brown Bear","Panda Bear","Sun Bear","Sloth Bear","Spectacled Bear","Asian Black Bear","Kodiak Bear"];return this.random.arrayElement(X)}cetacean(){let X=["Blue Whale","Humpback Whale","Orca","Dolphin","Porpoise","Beluga Whale","Sperm Whale","Gray Whale","Narwhal","Bottlenose Dolphin","Pilot Whale"];return this.random.arrayElement(X)}horse(){if(this.locale?.animal?.horse)return this.random.arrayElement(this.locale.animal.horse);let X=["Arabian","Thoroughbred","Quarter Horse","Morgan","Appaloosa","Paint Horse","Tennessee Walker","Standardbred","Mustang","Andalusian","Friesian","Clydesdale","Percheron","Belgian","Shire","Haflinger","Icelandic","Shetland Pony"];return this.random.arrayElement(X)}insect(){if(this.locale?.animal?.insect)return this.random.arrayElement(this.locale.animal.insect);let X=["Butterfly","Moth","Bee","Wasp","Ant","Beetle","Dragonfly","Grasshopper","Cricket","Ladybug","Firefly","Mosquito","Fly","Cockroach","Termite","Flea","Praying Mantis","Cicada","Caterpillar","Walking Stick"];return this.random.arrayElement(X)}lion(){let X=["African Lion","Asiatic Lion","Mountain Lion","Sea Lion"];return this.random.arrayElement(X)}rabbit(){if(this.locale?.animal?.rabbit)return this.random.arrayElement(this.locale.animal.rabbit);let X=["Holland Lop","Netherland Dwarf","Mini Rex","Lionhead","Flemish Giant","English Lop","Mini Lop","Dutch","Himalayan","Californian","New Zealand","Rex","Angora"];return this.random.arrayElement(X)}snake(){let X=["Python","Boa Constrictor","Rattlesnake","Cobra","Viper","Anaconda","Garter Snake","Corn Snake","King Snake","Milk Snake","Black Mamba","Copperhead","Cottonmouth"];return this.random.arrayElement(X)}}class E8{random;locale;constructor(X,$){this.random=X,this.locale=$}title(){if(this.locale?.book?.title)return this.random.arrayElement(this.locale.book.title);let X=["To Kill a Mockingbird","1984","Pride and Prejudice","The Great Gatsby","Moby Dick","War and Peace","The Odyssey","The Catcher in the Rye","The Lord of the Rings","Harry Potter and the Sorcerer's Stone","The Hobbit","The Chronicles of Narnia","Brave New World","The Divine Comedy","Crime and Punishment","The Brothers Karamazov","One Hundred Years of Solitude","The Sound and the Fury","Invisible Man","Beloved","The Grapes of Wrath","Catch-22","Slaughterhouse-Five","Fahrenheit 451","The Handmaid's Tale","The Road","Life of Pi","The Kite Runner","The Book Thief"];return this.random.arrayElement(X)}author(){if(this.locale?.book?.author)return this.random.arrayElement(this.locale.book.author);let X=["Ernest Hemingway","F. Scott Fitzgerald","Jane Austen","Charles Dickens","Mark Twain","Leo Tolstoy","Fyodor Dostoevsky","George Orwell","J.R.R. Tolkien","J.K. Rowling","Stephen King","Agatha Christie","William Shakespeare","Edgar Allan Poe","Harper Lee","Maya Angelou","Toni Morrison","Gabriel Garc\xEDa M\xE1rquez","Franz Kafka","James Joyce","Virginia Woolf","Oscar Wilde","Emily Dickinson","Walt Whitman","Robert Frost","Sylvia Plath","Kurt Vonnegut","Margaret Atwood","Haruki Murakami","Chimamanda Ngozi Adichie"];return this.random.arrayElement(X)}publisher(){if(this.locale?.book?.publisher)return this.random.arrayElement(this.locale.book.publisher);let X=["Penguin Random House","HarperCollins","Simon & Schuster","Macmillan","Hachette","Scholastic","Oxford University Press","Cambridge University Press","Pearson","Wiley","Springer","McGraw-Hill","Bloomsbury","Vintage","Doubleday","Knopf"];return this.random.arrayElement(X)}genre(){if(this.locale?.book?.genre)return this.random.arrayElement(this.locale.book.genre);let X=["Fiction","Non-Fiction","Mystery","Thriller","Romance","Science Fiction","Fantasy","Horror","Historical Fiction","Biography","Autobiography","Self-Help","Poetry","Drama","Comedy","Adventure","Young Adult","Children's","Crime","Western","Dystopian","Paranormal","Contemporary","Classic","Literary Fiction"];return this.random.arrayElement(X)}series(){if(this.locale?.book?.series)return this.random.arrayElement(this.locale.book.series);let X=["Harry Potter","The Lord of the Rings","A Song of Ice and Fire","The Hunger Games","Twilight","The Chronicles of Narnia","Percy Jackson","The Maze Runner","Divergent","The Mortal Instruments","Sherlock Holmes","Discworld","Dune","Foundation","The Wheel of Time","The Witcher","Millennium","Jack Reacher"];return this.random.arrayElement(X)}isbn(){if(this.random.boolean(0.5)){let _=Array.from({length:9},()=>this.random.int(0,9)),Q=this.random.int(0,10)===10?"X":String(this.random.int(0,9));return`${_.slice(0,1).join("")}-${_.slice(1,4).join("")}-${_.slice(4,9).join("")}-${Q}`}let X="978",$=this.random.int(0,9),Z=Array.from({length:3},()=>this.random.int(0,9)).join(""),Y=Array.from({length:5},()=>this.random.int(0,9)).join(""),U=this.random.int(0,9);return`${X}-${$}-${Z}-${Y}-${U}`}format(){let X=["Hardcover","Paperback","Mass Market Paperback","eBook","Audiobook","Kindle","PDF","EPUB","Board Book","Leather Bound","Library Binding"];return this.random.arrayElement(X)}review(){if(this.locale?.book?.review)return this.random.arrayElement(this.locale.book.review);let X=["A masterpiece of modern literature!","Gripping from start to finish.","Couldn't put it down!","A must-read for everyone.","Beautifully written and deeply moving.","An unforgettable story.","Brilliant and thought-provoking.","A page-turner with incredible characters.","One of the best books I've ever read.","Absolutely captivating!"];return this.random.arrayElement(X)}}class G8{random;locale;constructor(X,$){this.random=X,this.locale=$}hex(X){let $=X?.prefix??"#",Z=this.random.int(0,16777215).toString(16).padStart(6,"0").toUpperCase();return $+Z}rgb(X){let $=this.random.int(0,255),Z=this.random.int(0,255),Y=this.random.int(0,255);if(X?.alpha){let U=this.random.float(0,1,2);if(X?.format==="array")return[$,Z,Y,U];return`rgba(${$}, ${Z}, ${Y}, ${U})`}if(X?.format==="array")return[$,Z,Y];return`rgb(${$}, ${Z}, ${Y})`}hsl(X){let $=this.random.int(0,360),Z=this.random.int(0,100),Y=this.random.int(0,100);if(X?.alpha){let U=this.random.float(0,1,2);if(X?.format==="array")return[$,Z,Y,U];return`hsla(${$}, ${Z}%, ${Y}%, ${U})`}if(X?.format==="array")return[$,Z,Y];return`hsl(${$}, ${Z}%, ${Y}%)`}css(X){let $=X?.format??this.random.arrayElement(["hex","rgb","hsl"]);if($==="hex")return this.hex();if($==="rgb")return this.rgb();return this.hsl()}name(){if(this.locale?.commerce?.color)return this.random.arrayElement(this.locale.commerce.color);let X=["Red","Blue","Green","Yellow","Purple","Orange","Pink","Brown","Black","White","Gray","Cyan","Magenta","Lime","Navy","Teal","Olive","Maroon","Aqua","Silver","Fuchsia","Gold","Indigo","Violet"];return this.random.arrayElement(X)}hexColor(){return this.hex()}rgbColor(){return this.rgb()}rgbColorAsArray(){return this.rgb({format:"array"})}}class F8{random;locale;constructor(X,$){this.random=X,this.locale=$}product(){let X=this.locale?.commerce?.productAdjective??["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty","Premium","Luxury","Professional","Durable"],$=this.locale?.commerce?.productMaterial??["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen","Silk","Leather","Glass","Carbon","Aluminum"],Z=this.locale?.commerce?.product??["Chair","Table","Lamp","Keyboard","Mouse","Computer","Shoes","Shirt","Pants","Hat","Gloves","Towel","Soap","Bike","Ball","Book","Wallet","Watch","Phone","Desk","Bottle","Plate","Cup","Bag","Pen","Notebook","Backpack","Sunglasses"];return`${this.random.arrayElement(X)} ${this.random.arrayElement($)} ${this.random.arrayElement(Z)}`}productName(){return this.product()}department(){if(this.locale?.commerce?.department)return this.random.arrayElement(this.locale.commerce.department);let X=["Books","Movies","Music","Games","Electronics","Computers","Home","Garden","Tools","Grocery","Health","Beauty","Toys","Kids","Baby","Clothing","Shoes","Jewelry","Sports","Outdoors","Automotive","Industrial"];return this.random.arrayElement(X)}price(X){let $=X?.min??1,Z=X?.max??1000,Y=X?.dec??2,U=X?.symbol??"",_=this.random.float($,Z,Y);return U+_.toFixed(Y)}productAdjective(){if(this.locale?.commerce?.productAdjective)return this.random.arrayElement(this.locale.commerce.productAdjective);let X=["Small","Ergonomic","Rustic","Intelligent","Gorgeous","Incredible","Fantastic","Practical","Sleek","Awesome","Generic","Handcrafted","Handmade","Licensed","Refined","Unbranded","Tasty","Premium","Luxury","Professional","Durable","Innovative","Compact","Versatile","Modern","Classic","Vintage","Contemporary"];return this.random.arrayElement(X)}productMaterial(){if(this.locale?.commerce?.productMaterial)return this.random.arrayElement(this.locale.commerce.productMaterial);let X=["Steel","Wooden","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen","Silk","Leather","Glass","Carbon","Aluminum","Bronze","Copper","Brass","Titanium","Ceramic","Velvet","Linen","Wool"];return this.random.arrayElement(X)}productDescription(){let X=["The beautiful range of {adjective} {material} {product} comes with a {feature}.","Experience the {adjective} {product} that redefines {benefit}.","Our {adjective} {material} {product} is designed for {benefit}.","Discover the {adjective} {product} with {feature} for {benefit}."],$=["lifetime warranty","money-back guarantee","premium quality","eco-friendly design","cutting-edge technology","ergonomic design","sleek finish","modern aesthetics"],Z=["maximum comfort","everyday use","professional performance","home and office","outdoor adventures","creative projects","productivity","entertainment"];return this.random.arrayElement(X).replace("{adjective}",this.productAdjective().toLowerCase()).replace("{material}",this.productMaterial().toLowerCase()).replace("{product}","product").replace("{feature}",this.random.arrayElement($)).replace("{benefit}",this.random.arrayElement(Z))}review(){let X=["This product exceeded my expectations!","Absolutely love it! Worth every penny.","Great quality and fast shipping.","Not what I expected, but still decent.","Amazing! Highly recommend to everyone.","Perfect for my needs. Very satisfied.","Good value for the price.","Could be better, but it does the job.","Fantastic product! Will buy again.","Best purchase I've made this year!"];return this.random.arrayElement(X)}discountCode(){let X=["SAVE","GET","DEAL","OFFER","PROMO","SALE","DISCOUNT","SPECIAL"],$=this.random.int(10,99);return`${this.random.arrayElement(X)}${$}`}sku(){let X=this.random.arrayElement("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")).repeat(3),$=this.random.int(1e4,99999),Z=this.random.arrayElement("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")).repeat(3);return`${X}-${$}-${Z}`}}class O8{random;locale;constructor(X,$){this.random=X,this.locale=$}name(){let X=this.random.arrayElement(this.locale.company.name??["Company"]),$=this.random.arrayElement(this.locale.company.suffix??["Inc","LLC","Corp"]);return`${X} ${$}`}suffix(){return this.random.arrayElement(this.locale.company.suffix??["Inc","LLC","Corp"])}industry(){return this.random.arrayElement(this.locale.company.industry??["Technology"])}catchphrase(){let X=this.random.arrayElement(this.locale.company.adjective??["innovative"]),$=this.random.arrayElement(this.locale.company.descriptor??["digital"]),Z=this.random.arrayElement(this.locale.company.noun??["solution"]);return`${X} ${$} ${Z}`}buzzword(){return this.random.arrayElement(this.locale.company.buzzwords??["innovation"])}bs(){let X=this.buzzword(),$=this.random.arrayElement(this.locale.company.descriptor??["digital"]),Z=this.random.arrayElement(this.locale.company.noun??["solution"]);return`${X} ${$} ${Z}`}}class l${random;constructor(X){this.random=X}engine(){let X=["MySQL","PostgreSQL","MongoDB","SQLite","Redis","Oracle","Microsoft SQL Server","MariaDB","Cassandra","Elasticsearch","DynamoDB","CouchDB","Neo4j","Firebase","Firestore","InfluxDB","TimescaleDB","RethinkDB","ArangoDB","CockroachDB"];return this.random.arrayElement(X)}type(){let X=["VARCHAR","INTEGER","BIGINT","SMALLINT","DECIMAL","NUMERIC","FLOAT","DOUBLE","BOOLEAN","DATE","TIME","TIMESTAMP","DATETIME","TEXT","BLOB","JSON","JSONB","UUID","ENUM","ARRAY","SERIAL","BIGSERIAL"];return this.random.arrayElement(X)}collation(){let X=["utf8_general_ci","utf8_unicode_ci","utf8mb4_general_ci","utf8mb4_unicode_ci","latin1_swedish_ci","latin1_general_ci","utf8_bin","utf8mb4_bin"];return this.random.arrayElement(X)}column(){let X=["id","user_id","name","email","password","created_at","updated_at","deleted_at","first_name","last_name","phone","address","city","state","country","zip_code","status","role","permissions","description","price","quantity","total","subtotal","tax","discount","shipping","notes","metadata","settings","preferences","avatar"];return this.random.arrayElement(X)}table(){let X=["users","posts","comments","products","orders","customers","invoices","payments","categories","tags","roles","permissions","sessions","settings","notifications","messages","attachments","logs","analytics","reports","subscriptions","transactions"];return this.random.arrayElement(X)}mongodbObjectId(){let X="";for(let $=0;$<24;$++)X+="0123456789abcdef"[this.random.int(0,15)];return X}constraint(){let X=["PRIMARY KEY","FOREIGN KEY","UNIQUE","NOT NULL","CHECK","DEFAULT","INDEX"];return this.random.arrayElement(X)}queryType(){let X=["SELECT","INSERT","UPDATE","DELETE","CREATE","ALTER","DROP","TRUNCATE","JOIN","LEFT JOIN","RIGHT JOIN","INNER JOIN","OUTER JOIN","UNION","WHERE"];return this.random.arrayElement(X)}connectionString(X){let $=X?.engine??this.engine().toLowerCase().replace(/ /g,""),Z="user",Y="password",U="localhost",_=this.random.int(3000,9999),Q=this.table(),L={mysql:"mysql",postgresql:"postgresql",mongodb:"mongodb",redis:"redis"}[$]||"jdbc";if($==="mongodb")return`${L}://user:password@localhost:${_}/${Q}`;return`${L}://user:password@localhost:${_}/${Q}`}}class s${random;constructor(X){this.random=X}past(X){let $=X?.years??1,Z=X?.to??new Date,Y=X?.from??new Date(Z.getTime()-$*365*24*60*60*1000);return this.between({from:Y,to:Z})}future(X){let $=X?.years??1,Z=X?.from??new Date,Y=X?.to??new Date(Z.getTime()+$*365*24*60*60*1000);return this.between({from:Z,to:Y})}between(X){let $=X.from??new Date(Date.now()-31536000000),Z=X.to??new Date,Y=$.getTime(),U=Z.getTime(),_=this.random.int(Y,U);return new Date(_)}recent(X){let $=X?.days??1,Z=new Date,Y=new Date(Z.getTime()-$*24*60*60*1000);return this.between({from:Y,to:Z})}soon(X){let $=X?.days??1,Z=new Date,Y=new Date(Z.getTime()+$*24*60*60*1000);return this.between({from:Z,to:Y})}month(){let X=["January","February","March","April","May","June","July","August","September","October","November","December"];return this.random.arrayElement(X)}weekday(){let X=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];return this.random.arrayElement(X)}dateTime(){return this.between({from:new Date(1970,0,1),to:new Date})}dateTimeBetween(X){return this.between(X)}birthdate(X){let $=X?.mode??"age",Z=X?.refDate??new Date;if($==="year"){let z=X?.min??1900,j=X?.max??Z.getUTCFullYear(),E=new Date(Date.UTC(z,0,1)),W=new Date(Date.UTC(j,11,31,23,59,59,999));return this.between({from:E,to:W})}let Y=Math.max(0,X?.min??18),U=Math.max(Y,X?.max??80),_=(z)=>z*365.25*24*60*60*1000,Q=new Date(Z.getTime()-_(U)),L=new Date(Z.getTime()-_(Y));return this.between({from:Q,to:L})}}class o${random;constructor(X){this.random=X}amount(X){let $=X?.min??0,Z=X?.max??1e4,Y=X?.dec??2,U=X?.symbol??"",_=this.random.float($,Z,Y);return U+_.toFixed(Y)}account(X=8){let $="";for(let Z=0;Z<X;Z++)$+=this.random.int(0,9);return $}accountName(){let X=["Savings","Checking","Money Market","Investment","Credit Card","Personal Loan"];return`${this.random.arrayElement(X)} Account`}routingNumber(){return this.account(9)}creditCardNumber(X){let $=X?.formatted??!0,Z=X?.issuer??this.random.arrayElement(["visa","mastercard","amex","discover"]),Y="",U=16;switch(Z){case"visa":Y="4",U=16;break;case"mastercard":Y=`5${this.random.int(1,5)}`,U=16;break;case"amex":Y=`3${this.random.arrayElement(["4","7"])}`,U=15;break;case"discover":Y="6011",U=16;break}let _=Y;while(_.length<U)_+=this.random.int(0,9);if($){if(Z==="amex")return`${_.slice(0,4)}-${_.slice(4,10)}-${_.slice(10)}`;return _.match(/.{1,4}/g)?.join("-")??_}return _}cvv(){return this.account(3)}iban(X){let $=X?.countryCode??"GB",Z=X?.formatted??!1,Y=this.random.int(10,99).toString(),U="WEST",_=this.account(14),Q=$+Y+"WEST"+_;if(Z)return Q.match(/.{1,4}/g)?.join(" ")??Q;return Q}bic(){let X="";for(let $=0;$<4;$++)X+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[this.random.int(0,25)];for(let $=0;$<2;$++)X+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[this.random.int(0,25)];for(let $=0;$<2;$++)X+=this.random.arrayElement([..."ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),...Array.from({length:10},(Z,Y)=>Y.toString())]);return X}bitcoin(){let X=this.random.arrayElement(["1","3"]);for(let $=0;$<33;$++)X+="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"[this.random.int(0,57)];return X}ethereum(){let X="0x";for(let $=0;$<40;$++)X+="0123456789abcdef"[this.random.int(0,15)];return X}currencyCode(){let X=["USD","EUR","GBP","JPY","AUD","CAD","CHF","CNY","SEK","NZD","INR","BRL","RUB","KRW"];return this.random.arrayElement(X)}currencyName(){let X=["US Dollar","Euro","British Pound","Japanese Yen","Australian Dollar","Canadian Dollar","Swiss Franc","Chinese Yuan","Swedish Krona","New Zealand Dollar","Indian Rupee","Brazilian Real","Russian Ruble","South Korean Won"];return this.random.arrayElement(X)}currencySymbol(){let X=["$","\u20AC","\xA3","\xA5","\u20B9","R$","\u20BD","\u20A9","kr","CHF"];return this.random.arrayElement(X)}transactionType(){let X=["deposit","withdrawal","payment","invoice","transfer"];return this.random.arrayElement(X)}}class J8{random;locale;constructor(X,$){this.random=X,this.locale=$}dish(){if(this.locale?.food?.dish)return this.random.arrayElement(this.locale.food.dish);let X=["Spaghetti Carbonara","Chicken Alfredo","Beef Tacos","Margherita Pizza","Caesar Salad","Pad Thai","Chicken Tikka Masala","Sushi Roll","Beef Burger","Fish and Chips","Ramen","Tom Yum Soup","Greek Salad","Lasagna","Paella","Pho","Falafel Wrap","Burrito Bowl","Chicken Curry","Steak Frites","Risotto","Poke Bowl","Bibimbap","Shakshuka","Eggs Benedict","Club Sandwich","Caprese Salad","Fettuccine Alfredo","Chicken Parmesan","Pulled Pork Sandwich","Gyro","Butter Chicken","Peking Duck"];return this.random.arrayElement(X)}ingredient(){if(this.locale?.food?.ingredient)return this.random.arrayElement(this.locale.food.ingredient);let X=["Garlic","Onion","Tomato","Basil","Oregano","Thyme","Rosemary","Cilantro","Parsley","Salt","Pepper","Olive Oil","Butter","Flour","Sugar","Eggs","Milk","Cheese","Chicken","Beef","Pork","Fish","Shrimp","Rice","Pasta","Potatoes","Carrots","Celery","Bell Pepper","Mushrooms","Spinach","Lettuce","Cucumber","Avocado","Lemon","Lime","Ginger","Soy Sauce","Vinegar","Honey","Cinnamon","Cumin"];return this.random.arrayElement(X)}spice(){if(this.locale?.food?.spice)return this.random.arrayElement(this.locale.food.spice);let X=["Basil","Oregano","Thyme","Rosemary","Sage","Cilantro","Parsley","Mint","Dill","Paprika","Cumin","Turmeric","Coriander","Cardamom","Cinnamon","Nutmeg","Cloves","Black Pepper","White Pepper","Cayenne","Chili Powder","Curry Powder","Garam Masala","Saffron","Vanilla","Bay Leaf","Fennel","Anise","Tarragon","Marjoram"];return this.random.arrayElement(X)}vegetable(){if(this.locale?.food?.vegetable)return this.random.arrayElement(this.locale.food.vegetable);let X=["Broccoli","Carrot","Celery","Lettuce","Spinach","Kale","Cabbage","Cauliflower","Brussels Sprouts","Asparagus","Green Beans","Peas","Corn","Potato","Sweet Potato","Tomato","Cucumber","Bell Pepper","Zucchini","Eggplant","Mushroom","Onion","Garlic","Radish","Beet","Turnip","Artichoke","Bok Choy","Arugula","Swiss Chard"];return this.random.arrayElement(X)}fruit(){if(this.locale?.food?.fruit)return this.random.arrayElement(this.locale.food.fruit);let X=["Apple","Banana","Orange","Grape","Strawberry","Blueberry","Raspberry","Blackberry","Mango","Pineapple","Watermelon","Cantaloupe","Honeydew","Peach","Plum","Cherry","Pear","Kiwi","Papaya","Dragon Fruit","Lychee","Passion Fruit","Pomegranate","Coconut","Avocado","Lemon","Lime","Grapefruit","Apricot","Fig","Date"];return this.random.arrayElement(X)}meat(){if(this.locale?.food?.meat)return this.random.arrayElement(this.locale.food.meat);let X=["Beef","Chicken","Pork","Lamb","Turkey","Duck","Veal","Venison","Bison","Rabbit","Goat","Quail","Pheasant","Bacon","Sausage","Ham","Salami"];return this.random.arrayElement(X)}seafood(){let X=["Salmon","Tuna","Cod","Halibut","Trout","Mackerel","Sardines","Anchovies","Shrimp","Crab","Lobster","Scallops","Clams","Mussels","Oysters","Squid","Octopus","Tilapia","Sea Bass","Swordfish","Snapper","Grouper","Catfish"];return this.random.arrayElement(X)}dessert(){if(this.locale?.food?.dessert)return this.random.arrayElement(this.locale.food.dessert);let X=["Chocolate Cake","Cheesecake","Apple Pie","Ice Cream","Brownies","Cookies","Tiramisu","Cr\xE8me Br\xFBl\xE9e","Panna Cotta","Macarons","Cupcakes","Donuts","Eclairs","Profiteroles","Cannoli","Baklava","Flan","Churros","Gelato","Sorbet","Mousse","Tart","Cobbler","Pudding","Trifle","Souffl\xE9"];return this.random.arrayElement(X)}ethnicCategory(){if(this.locale?.food?.cuisine)return this.random.arrayElement(this.locale.food.cuisine);let X=["Italian","Chinese","Japanese","Mexican","Thai","Indian","French","Greek","Spanish","Korean","Vietnamese","Lebanese","Turkish","Brazilian","Moroccan","Ethiopian","Caribbean","Peruvian","German","American","British","Irish"];return this.random.arrayElement(X)}description(){let X=["Delicious","Savory","Sweet","Spicy","Tangy","Crispy","Tender","Juicy","Flavorful","Rich","Fresh","Aromatic","Creamy","Zesty","Hearty","Light"],$=["and flavorful","and satisfying","and aromatic","and authentic","and homemade","and traditional","and innovative","and exquisite","and mouthwatering"];return`${this.random.arrayElement(X)} ${this.random.arrayElement($)}`}}class r${random;constructor(X){this.random=X}branch(){let X=["feature","bugfix","hotfix","refactor","chore","docs","test"],$=["add","update","fix","remove","improve","refactor","optimize","enhance","implement"],Z=["authentication","database","api","ui","tests","documentation","config","validation","error-handling","logging","security","performance","caching"],Y=this.random.arrayElement(X),U=this.random.arrayElement($),_=this.random.arrayElement(Z);return`${Y}/${U}-${_}`}commitMessage(){let X=["feat","fix","docs","style","refactor","test","chore","perf"],$=["api","ui","auth","db","config","deps","core","utils"],Z=["add","update","fix","remove","improve","refactor","optimize","enhance","implement"],Y=["user authentication","database connection","API endpoint","UI component","test coverage","documentation","configuration","validation logic","error handling","logging system"],U=this.random.arrayElement(X),_=this.random.boolean(0.5)?`(${this.random.arrayElement($)})`:"",Q=this.random.arrayElement(Z),L=this.random.arrayElement(Y);return`${U}${_}: ${Q} ${L}`}commitSha(X){let $=X?.short?7:40,Z="0123456789abcdef",Y="";for(let U=0;U<$;U++)Y+="0123456789abcdef"[this.random.int(0,15)];return Y}commitEntry(){let X=this.commitSha({short:!0}),$=this.commitMessage();return`${X} ${$}`}commitAuthor(X){let $=["John Doe","Jane Smith","Bob Johnson","Alice Williams","Charlie Brown","Diana Davis","Eve Martinez","Frank Garcia","Grace Wilson","Henry Lee"],Z=X?.name??this.random.arrayElement($),Y=X?.email??`${Z.toLowerCase().replace(" ",".")}@example.com`;return`${Z} <${Y}>`}remote(X){let $=X?.protocol??this.random.arrayElement(["https","ssh"]),Z=X?.platform??this.random.arrayElement(["github","gitlab","bitbucket"]),Y=this.random.arrayElement(["acme","techcorp","devteam","opensource","mycompany"]),U=this.random.arrayElement(["webapp","api","mobile-app","backend","frontend","monorepo"]),_={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"};if($==="ssh")return`git@${_[Z]}:${Y}/${U}.git`;return`https://${_[Z]}/${Y}/${U}.git`}tag(){let X=this.random.int(0,5),$=this.random.int(0,20),Z=this.random.int(0,50),Y=this.random.boolean(0.2)?`-${this.random.arrayElement(["alpha","beta","rc"])}.${this.random.int(1,10)}`:"";return`v${X}.${$}.${Z}${Y}`}}class W8{random;locale;constructor(X,$){this.random=X,this.locale=$}abbreviation(){if(this.locale?.hacker?.abbreviation)return this.random.arrayElement(this.locale.hacker.abbreviation);let X=["TCP","HTTP","SDD","RAM","GB","CSS","SSL","AGP","SQL","CLI","IB","UX","UI","FTP","AI","ADP","RSS","XML","EXE","COM","HDD","THX","MP3","GPU","API","DNS","IP","LAN","WAN","VPN","SSH","HTTPS","JSON","REST","SOAP"];return this.random.arrayElement(X)}adjective(){if(this.locale?.hacker?.adjective)return this.random.arrayElement(this.locale.hacker.adjective);let X=["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","haptic","multi-byte","bluetooth","wireless","mobile","neural","optical","solid state","cloud","quantum","distributed","encrypted"];return this.random.arrayElement(X)}noun(){if(this.locale?.hacker?.noun)return this.random.arrayElement(this.locale.hacker.noun);let X=["driver","protocol","bandwidth","panel","microchip","program","port","card","array","interface","system","sensor","firewall","hard drive","pixel","alarm","feed","monitor","application","transmitter","bus","circuit","capacitor","matrix","server","database","network","router","switch","gateway","node","cluster"];return this.random.arrayElement(X)}verb(){if(this.locale?.hacker?.verb)return this.random.arrayElement(this.locale.hacker.verb);let X=["back up","bypass","hack","override","compress","copy","navigate","index","connect","generate","quantify","calculate","synthesize","input","transmit","program","reboot","parse","compile","encode","decode","encrypt","decrypt","patch","upgrade","deploy","configure","optimize","refactor","debug"];return this.random.arrayElement(X)}ingverb(){if(this.locale?.hacker?.ingverb)return this.random.arrayElement(this.locale.hacker.ingverb);let X=["backing up","bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","quantifying","calculating","synthesizing","transmitting","programming","parsing","compiling","encoding","decoding","encrypting","decrypting","patching","deploying","configuring","optimizing"];return this.random.arrayElement(X)}phrase(){if(this.locale?.hacker?.phrase)return this.random.arrayElement(this.locale.hacker.phrase);let X=["If we {verb} the {noun}, we can get to the {abbreviation} {noun} through the {adjective} {abbreviation} {noun}!","We need to {verb} the {adjective} {abbreviation} {noun}!","Try to {verb} the {abbreviation} {noun}, maybe it will {verb} the {adjective} {noun}!","You can't {verb} the {noun} without {ingverb} the {adjective} {abbreviation} {noun}!","Use the {adjective} {abbreviation} {noun}, then you can {verb} the {adjective} {noun}!","The {abbreviation} {noun} is down, {verb} the {adjective} {noun} so we can {verb} the {abbreviation} {noun}!","{ingverb} the {noun} won't do anything, we need to {verb} the {adjective} {abbreviation} {noun}!","I'll {verb} the {adjective} {abbreviation} {noun}, that should {verb} the {abbreviation} {noun}!"];return this.random.arrayElement(X).replace(/\{verb\}/g,()=>this.verb()).replace(/\{ingverb\}/g,()=>this.ingverb()).replace(/\{noun\}/g,()=>this.noun()).replace(/\{adjective\}/g,()=>this.adjective()).replace(/\{abbreviation\}/g,()=>this.abbreviation())}}class a${random;constructor(X){this.random=X}randomElement(X){return this.random.arrayElement(X)}arrayElement(X){return this.random.arrayElement(X)}arrayElements(X,$){return this.random.arrayElements(X,$)}shuffle(X){return this.random.shuffle(X)}numerify(X){return X.replace(/#/g,()=>String(this.random.int(0,9)))}lexify(X){return X.replace(/\?/g,()=>this.random.arrayElement("abcdefghijklmnopqrstuvwxyz".split("")))}bothify(X){return this.numerify(this.lexify(X))}replaceSymbols(X){return this.random.replaceSymbols(X)}boolean(X=0.5){return this.random.boolean(X)}objectKey(X){let $=Object.keys(X);return this.random.arrayElement($)}objectValue(X){let $=this.objectKey(X);return X[$]}multiple(X,$=3){return Array.from({length:$},X)}maybe(X,$=0.5){return this.random.boolean($)?X():void 0}unique(X,$=50){let Z=new Set,Y=0;while(Y<$){let U=X();if(!Z.has(U))return Z.add(U),U;Y++}throw Error(`Failed to generate unique value after ${$} retries`)}replaceCreditCardSymbols(X="####-####-####-####",$="#"){return this.random.replaceCreditCardSymbols(X,$)}regexify(X){return X.replace(/\[A-Z\]/g,()=>this.random.arrayElement("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""))).replace(/\[a-z\]/g,()=>this.random.arrayElement("abcdefghijklmnopqrstuvwxyz".split(""))).replace(/\[0-9\]/g,()=>String(this.random.int(0,9))).replace(/\{(\d+)\}/g,($,Z)=>{return""})}}class t${random;constructor(X){this.random=X}url(X){let $=X?.width??640,Z=X?.height??480;return`https://via.placeholder.com/${$}x${Z}`}avatar(){return`https://i.pravatar.cc/${this.random.int(100,500)}`}urlLoremFlickr(X){let $=X?.width??640,Z=X?.height??480,Y=X?.category??"";if(Y)return`https://loremflickr.com/${$}/${Z}/${Y}`;return`https://loremflickr.com/${$}/${Z}`}urlPicsumPhotos(X){let $=X?.width??640,Z=X?.height??480,Y=`https://picsum.photos/${$}/${Z}`;if(X?.grayscale)Y+="?grayscale";if(X?.blur)Y+=X?.grayscale?`&blur=${X.blur}`:`?blur=${X.blur}`;return Y}dataUri(X){let $=X?.width??640,Z=X?.height??480,Y=X?.color??this.random.int(0,16777215).toString(16).padStart(6,"0"),U=`<svg xmlns="http://www.w3.org/2000/svg" width="${$}" height="${Z}"><rect width="${$}" height="${Z}" fill="#${Y}"/></svg>`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(U)}`}githubAvatar(){return`https://avatars.githubusercontent.com/u/${this.random.int(1,1e5)}`}category(){let X=["abstract","animals","business","cats","city","food","nature","nightlife","fashion","people","sports","technics","transport","travel"];return this.random.arrayElement(X)}imageType(){let X=["jpg","jpeg","png","gif","svg","webp","bmp","tiff"];return this.random.arrayElement(X)}}class V8{random;locale;domainWordsCache=null;constructor(X,$){this.random=X,this.locale=$}getDomainWords(){if(!this.domainWordsCache){let X=this.locale.company.name??["company","tech","digital"];this.domainWordsCache=X.map(($)=>$.toLowerCase().replace(/[^a-z0-9]/g,"")).filter(($)=>$.length>0)}return this.domainWordsCache}email(X){let $;if(X?.firstName)$=X.firstName.toLowerCase();else{let Q=this.locale.person.firstNameMale.length,L=this.locale.person.firstNameFemale.length,z=this.locale.person.firstNameNeutral?.length||0,j=Q+L+z,E=this.random.int(0,j-1);if(E<Q)$=this.locale.person.firstNameMale[E].toLowerCase();else if(E<Q+L)$=this.locale.person.firstNameFemale[E-Q].toLowerCase();else $=this.locale.person.firstNameNeutral[E-Q-L].toLowerCase()}let Z=X?.lastName??this.random.arrayElement(this.locale.person.lastName).toLowerCase(),Y=X?.provider??this.random.arrayElement(this.locale.internet.domainSuffix??["com","net","org"]),U=this.random.arrayElement(Q7),_=this.random.arrayElement(this.getDomainWords());return`${$}${U}${Z}@${_}.${Y}`}safeEmail(){return this.email({provider:this.random.arrayElement(["example.com","example.org","example.net"])})}freeEmail(){let X=this.locale.person.firstNameMale.length,$=this.locale.person.firstNameFemale.length,Z=this.locale.person.firstNameNeutral?.length||0,Y=X+$+Z,U=this.random.int(0,Y-1),_;if(U<X)_=this.locale.person.firstNameMale[U].toLowerCase();else if(U<X+$)_=this.locale.person.firstNameFemale[U-X].toLowerCase();else _=this.locale.person.firstNameNeutral[U-X-$].toLowerCase();let Q=this.random.arrayElement(this.locale.person.lastName).toLowerCase(),L=this.random.arrayElement(this.locale.internet.freeEmail??["gmail.com","yahoo.com","hotmail.com"]),z=[".","_",""],j=this.random.arrayElement(z);return`${_}${j}${Q}@${L}`}username(X){let $;if(X?.firstName)$=X.firstName.toLowerCase();else{let U=this.locale.person.firstNameMale.length,_=this.locale.person.firstNameFemale.length,Q=this.locale.person.firstNameNeutral?.length||0,L=U+_+Q,z=this.random.int(0,L-1);if(z<U)$=this.locale.person.firstNameMale[z].toLowerCase();else if(z<U+_)$=this.locale.person.firstNameFemale[z-U].toLowerCase();else $=this.locale.person.firstNameNeutral[z-U-_].toLowerCase()}let Z=X?.lastName?.toLowerCase()??this.random.arrayElement(this.locale.person.lastName).toLowerCase(),Y=[`${$}${Z}`,`${$}_${Z}`,`${$}.${Z}`,`${$}${this.random.int(10,999)}`,`${$}_${Z}${this.random.int(10,99)}`];return this.random.arrayElement(Y)}password(X){let $=X?.length??12,Z=X?.memorable??!1,Y=X?.prefix??"";if(Z){let Q=[...this.locale.person.firstNameMale,...this.locale.person.firstNameFemale,...this.locale.person.firstNameNeutral||[]],L=[];for(let z=0;z<3;z++)L.push(this.random.arrayElement(Q));return Y+L.join("-")+this.random.int(10,999)}let U="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*",_=Y;for(let Q=Y.length;Q<$;Q++)_+=U[this.random.int(0,U.length-1)];return _}url(X){let $=X?.protocol??this.random.arrayElement(["http","https"]),Z=X?.domain??this.domainName();return`${$}://${Z}`}domainName(){return`${this.domainWord()}.${this.domainSuffix()}`}domainWord(){return this.random.arrayElement(this.getDomainWords())}domainSuffix(){return this.random.arrayElement(this.locale.internet.domainSuffix??["com","net","org"])}ipv4(){return`${this.random.int(0,255)}.${this.random.int(0,255)}.${this.random.int(0,255)}.${this.random.int(0,255)}`}ipv6(){let X=[];for(let $=0;$<8;$++)X.push(this.random.int(0,65535).toString(16).padStart(4,"0"));return X.join(":")}mac(X=":"){let $=[];for(let Z=0;Z<6;Z++)$.push(this.random.int(0,255).toString(16).padStart(2,"0").toUpperCase());return $.join(X)}userAgent(){let X=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/120.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:109.0) Gecko/20100101 Firefox/120.0"];return this.random.arrayElement(X)}slug(X=3){let $=[];for(let Z=0;Z<X;Z++)$.push(this.random.arrayElement(this.locale.company.buzzwords??["innovation","technology","solution"]));return $.join("-").toLowerCase()}ip(){return this.ipv4()}}class e${random;constructor(X){this.random=X}word(){return this.random.arrayElement(z7)}words(X=3){let $=[];for(let Z=0;Z<X;Z++)$.push(this.word());return $.join(" ")}sentence(X){let $=X??this.random.int(3,10),Z=this.words($);return`${Z.charAt(0).toUpperCase()+Z.slice(1)}.`}sentences(X=3,$=" "){let Z=[];for(let Y=0;Y<X;Y++)Z.push(this.sentence());return Z.join($)}paragraph(X){let $=X??this.random.int(3,7);return this.sentences($)}paragraphs(X=3,$=`
|
|
456
|
-
|
|
457
|
-
`){let Z=[];for(let Y=0;Y<X;Y++)Z.push(this.paragraph());return Z.join($)}text(X){let $=X??200,Z="";while(Z.length<$)Z+=`${this.paragraph()} `;return Z.trim().slice(0,$)}slug(X=3){return this.words(X).replace(/ /g,"-")}lines(X=3){let $=[];for(let Z=0;Z<X;Z++)$.push(this.sentence());return $.join(`
|
|
458
|
-
`)}}class I8{random;locale;constructor(X,$){this.random=X,this.locale=$}genre(){if(this.locale?.music?.genre)return this.random.arrayElement(this.locale.music.genre);let X=["Rock","Pop","Jazz","Blues","Classical","Hip Hop","R&B","Country","Electronic","Dance","Metal","Punk","Reggae","Soul","Funk","Disco","House","Techno","Dubstep","Indie","Alternative","Folk","Gospel","Latin","K-Pop","EDM","Trap","Lo-Fi","Ambient","Ska"];return this.random.arrayElement(X)}songName(){if(this.locale?.music?.song)return this.random.arrayElement(this.locale.music.song);let X=["Dancing in the Moonlight","Bohemian Rhapsody","Stairway to Heaven","Hotel California","Imagine","Yesterday","Hey Jude","Sweet Child O' Mine","Smells Like Teen Spirit","Billie Jean","Thriller","Purple Rain","Born to Run","Like a Rolling Stone","What's Going On","Respect","Good Vibrations","Johnny B. Goode","I Want to Hold Your Hand","Satisfaction","My Generation","Brown Sugar","Layla","Crossroads","The End","Light My Fire","All Along the Watchtower","While My Guitar Gently Weeps","A Day in the Life"];return this.random.arrayElement(X)}albumName(){let X=["Abbey Road","The Dark Side of the Moon","Thriller","Back in Black","The Wall","Rumours","Nevermind","Led Zeppelin IV","Born in the U.S.A.","Sgt. Pepper's Lonely Hearts Club Band","OK Computer","The Beatles (White Album)","Purple Rain","Hotel California","21","Appetite for Destruction","Lemonade","To Pimp a Butterfly","Random Access Memories"];return this.random.arrayElement(X)}artist(){if(this.locale?.music?.artist)return this.random.arrayElement(this.locale.music.artist);let X=["The Beatles","Led Zeppelin","Pink Floyd","Queen","The Rolling Stones","Elvis Presley","Michael Jackson","Madonna","David Bowie","Nirvana","Radiohead","U2","AC/DC","Metallica","Bob Dylan","Jimi Hendrix","Prince","Stevie Wonder","Aretha Franklin","The Who","The Doors","Fleetwood Mac","Eagles","Guns N' Roses","Red Hot Chili Peppers","Coldplay","Beyonc\xE9","Taylor Swift","Drake","Kendrick Lamar","Adele","Ed Sheeran"];return this.random.arrayElement(X)}instrument(){if(this.locale?.music?.instrument)return this.random.arrayElement(this.locale.music.instrument);let X=["Guitar","Piano","Drums","Bass","Violin","Saxophone","Trumpet","Flute","Clarinet","Cello","Harp","Keyboard","Harmonica","Accordion","Ukulele","Banjo","Mandolin","Trombone","French Horn","Tuba","Oboe","Bassoon","Xylophone","Marimba","Tambourine","Synthesizer","Didgeridoo","Sitar","Tabla","Djembe"];return this.random.arrayElement(X)}note(){let X=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];return this.random.arrayElement(X)}chord(){let X=this.note(),$=this.random.arrayElement(["maj","min","maj7","min7","7","dim","aug","sus4","sus2"]);return`${X}${$}`}tempo(){return this.random.int(60,200)}key(){let X=this.note(),$=this.random.arrayElement(["Major","Minor"]);return`${X} ${$}`}timeSignature(){let X=["4/4","3/4","6/8","5/4","7/8","2/4","9/8","12/8"];return this.random.arrayElement(X)}}class XZ{random;constructor(X){this.random=X}int(X){let $=X?.min??0,Z=X?.max??100;return this.random.int($,Z)}float(X){let $=X?.min??0,Z=X?.max??1,Y=X?.precision??2;return this.random.float($,Z,Y)}bigInt(X){let $=X?.min??0n,Z=(X?.max??1000000n)-$+1n,Y=BigInt(Math.floor(this.random.number()*Number(Z)));return $+Y}binary(X){let $=X?.length??8,Z="";for(let Y=0;Y<$;Y++)Z+=this.random.int(0,1);return Z}octal(X){let $=X?.length??3,Z="";for(let Y=0;Y<$;Y++)Z+=this.random.int(0,7);return Z}hex(X){let $=X?.length??6,Z="0123456789ABCDEF",Y="";for(let U=0;U<$;U++)Y+="0123456789ABCDEF"[this.random.int(0,15)];return Y}randomNumber(X){return this.int(X)}randomDigit(){return this.int({min:0,max:9})}randomDigitNotZero(){return this.int({min:1,max:9})}}class R8{random;locale;constructor(X,$){this.random=X,this.locale=$}firstName(X){if(X?.gender==="male")return this.firstNameMale();if(X?.gender==="female")return this.firstNameFemale();if(X?.gender==="neutral")return this.firstNameNeutral();let $=this.locale.person.firstNameMale.length,Z=this.locale.person.firstNameFemale.length,Y=this.locale.person.firstNameNeutral?.length||0,U=$+Z+Y,_=this.random.int(0,U-1);if(_<$)return this.locale.person.firstNameMale[_];if(_<$+Z)return this.locale.person.firstNameFemale[_-$];return this.locale.person.firstNameNeutral[_-$-Z]}firstNameMale(){return this.random.arrayElement(this.locale.person.firstNameMale)}firstNameFemale(){return this.random.arrayElement(this.locale.person.firstNameFemale)}firstNameNeutral(){if(!this.locale.person.firstNameNeutral||this.locale.person.firstNameNeutral.length===0){let X=[...this.locale.person.firstNameMale,...this.locale.person.firstNameFemale];return this.random.arrayElement(X)}return this.random.arrayElement(this.locale.person.firstNameNeutral)}lastName(){return this.random.arrayElement(this.locale.person.lastName)}fullName(X){if(!X)return`${this.firstName()} ${this.lastName()}`;let $=this.firstName({gender:X.gender}),Z=this.lastName();if(X.prefix&&X.suffix)return`${this.prefix()} ${$} ${Z} ${this.suffix()}`;if(X.prefix)return`${this.prefix()} ${$} ${Z}`;if(X.suffix)return`${$} ${Z} ${this.suffix()}`;return`${$} ${Z}`}prefix(){return this.random.arrayElement(this.locale.person.prefix)}suffix(){return this.random.arrayElement(this.locale.person.suffix)}gender(){return this.random.arrayElement(this.locale.person.gender)}jobTitle(){return this.random.arrayElement(this.locale.person.jobTitle)}name(){return this.fullName()}firstNameAdvanced(X){let $;if(X?.constraints)$=this.firstName({gender:X.constraints.gender});else $=this.firstName({gender:X?.gender});if(X?.weighted)$=y8(this.random,X.weighted);if(X?.relationships)$=c9({firstName:$,gender:X?.gender||X?.constraints?.gender},X.relationships).firstName||$;if(X?.validation){let Z=B8($,X.validation);if(!Z.isValid){if(X.validation.strict)throw Error(`Validation failed: ${Z.errors.join(", ")}`);$=this.firstName({gender:X?.gender||X?.constraints?.gender})}}return $}fullNameAdvanced(X){let $;if(X?.constraints)$=this.fullName({gender:X.constraints.gender,prefix:X.prefix,suffix:X.suffix});else $=this.fullName(X);if(X?.weighted)$=y8(this.random,X.weighted);if(X?.relationships)$=c9({fullName:$,gender:X?.gender||X?.constraints?.gender},X.relationships).fullName||$;if(X?.validation){let Z=B8($,X.validation);if(!Z.isValid){if(X.validation.strict)throw Error(`Validation failed: ${Z.errors.join(", ")}`);$=this.fullName({gender:X?.gender||X?.constraints?.gender,prefix:X?.prefix,suffix:X?.suffix})}}return $}profile(X){let $=X?.constraints?.gender||X?.gender||this.gender(),Z=this.firstNameAdvanced({...X,gender:$}),Y=this.lastName(),U=`${Z} ${Y}`,_={firstName:Z,lastName:Y,fullName:U,gender:$,jobTitle:this.jobTitle(),age:X?.constraints?.ageRange?this.random.int(X.constraints.ageRange.min,X.constraints.ageRange.max):this.random.int(18,80)};if(X?.relationships)return c9(_,X.relationships);return _}family(X){let $=X?.size||this.random.int(2,6),Z=this.lastName(),Y=["parent","parent","child","child","child","grandparent"],U=[];for(let _=0;_<$;_++){let Q=Y[_]||"relative",L=Q==="parent"||Q==="grandparent"?this.random.weightedBoolean(0.6)?"male":"female":this.random.boolean()?"male":"female",z=this.firstNameAdvanced({...X,gender:L,constraints:{...X?.constraints,gender:L}});U.push({firstName:z,lastName:Z,fullName:`${z} ${Z}`,gender:L,relationship:Q})}return{members:U,lastName:Z}}}class K8{random;locale;constructor(X,$){this.random=X,this.locale=$}number(X){let $=X??this.random.arrayElement(this.locale.phone.formats??["###-###-####"]);return this.random.replaceSymbols($)}phoneNumber(X){return this.number(X)}}class D8{random;locale;constructor(X,$){this.random=X,this.locale=$}chemicalElement(){if(this.locale?.science?.chemicalElement)return this.random.arrayElement(this.locale.science.chemicalElement);let X=["Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminum","Silicon","Phosphorus","Sulfur","Chlorine","Argon","Potassium","Calcium","Iron","Copper","Zinc","Silver","Gold","Mercury","Lead","Uranium","Platinum","Titanium"];return this.random.arrayElement(X)}chemicalElementSymbol(){let X=["H","He","Li","Be","B","C","N","O","F","Ne","Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Fe","Cu","Zn","Ag","Au","Hg","Pb","U","Pt","Ti"];return this.random.arrayElement(X)}unit(){if(this.locale?.science?.unit)return this.random.arrayElement(this.locale.science.unit);let X=["meter","kilogram","second","ampere","kelvin","mole","candela","newton","pascal","joule","watt","coulomb","volt","ohm","farad","weber","tesla","henry","celsius","lumen","lux","becquerel","gray","sievert","katal","hertz","radian","steradian"];return this.random.arrayElement(X)}constant(){if(this.locale?.science?.constant)return this.random.arrayElement(this.locale.science.constant);let X=["Speed of Light","Gravitational Constant","Planck Constant","Boltzmann Constant","Avogadro Constant","Elementary Charge","Magnetic Constant","Electric Constant","Fine Structure Constant","Rydberg Constant","Gas Constant","Stefan-Boltzmann Constant"];return this.random.arrayElement(X)}field(){if(this.locale?.science?.field)return this.random.arrayElement(this.locale.science.field);let X=["Physics","Chemistry","Biology","Astronomy","Geology","Ecology","Genetics","Neuroscience","Quantum Mechanics","Thermodynamics","Electromagnetism","Biochemistry","Molecular Biology","Microbiology","Botany","Zoology","Meteorology","Oceanography"];return this.random.arrayElement(X)}dnaSequence(X=12){let $=["A","T","C","G"],Z="";for(let Y=0;Y<X;Y++)Z+=this.random.arrayElement($);return Z}rnaSequence(X=12){let $=["A","U","C","G"],Z="";for(let Y=0;Y<X;Y++)Z+=this.random.arrayElement($);return Z}hypothesis(){let X=["temperature increases","pressure decreases","concentration rises","pH changes","light intensity increases","surface area increases","catalyst is added"],$=["reaction rate increases","solubility changes","equilibrium shifts","rate decreases","yield improves","product formation accelerates","process efficiency increases"];return`If ${this.random.arrayElement(X)}, then ${this.random.arrayElement($)}`}}class M8{random;locale;constructor(X,$){this.random=X,this.locale=$}sport(){if(this.locale?.sport?.sport)return this.random.arrayElement(this.locale.sport.sport);let X=["Football","Basketball","Baseball","Soccer","Tennis","Golf","Hockey","Boxing","Wrestling","Swimming","Track and Field","Volleyball","Cricket","Rugby","Lacrosse","Badminton","Table Tennis","Bowling","Skiing","Snowboarding","Surfing","Skateboarding","Cycling","Running","Marathon","Triathlon","Gymnastics","Fencing","Archery","Martial Arts","Karate","Judo","Taekwondo","MMA","Formula 1","NASCAR","Sailing"];return this.random.arrayElement(X)}team(){if(this.locale?.sport?.team)return this.random.arrayElement(this.locale.sport.team);let X=["Lakers","Warriors","Bulls","Celtics","Knicks","Heat","Spurs","Mavericks","Yankees","Red Sox","Dodgers","Cubs","Giants","Astros","Braves","Phillies","Patriots","49ers","Cowboys","Packers","Steelers","Eagles","Seahawks","Chiefs","Manchester United","Real Madrid","Barcelona","Liverpool","Bayern Munich","PSG","Maple Leafs","Bruins","Canadiens","Blackhawks","Penguins","Lightning"];return this.random.arrayElement(X)}athlete(){if(this.locale?.sport?.athlete)return this.random.arrayElement(this.locale.sport.athlete);let X=["Michael Jordan","LeBron James","Tom Brady","Serena Williams","Tiger Woods","Muhammad Ali","Babe Ruth","Wayne Gretzky","Pel\xE9","Cristiano Ronaldo","Lionel Messi","Roger Federer","Usain Bolt","Simone Biles","Michael Phelps","Kobe Bryant","Derek Jeter","Joe Montana","Magic Johnson","Larry Bird"];return this.random.arrayElement(X)}position(){let X=["Quarterback","Running Back","Wide Receiver","Linebacker","Defensive Back","Point Guard","Shooting Guard","Small Forward","Power Forward","Center","Pitcher","Catcher","First Base","Shortstop","Outfielder","Forward","Midfielder","Defender","Goalkeeper","Striker","Winger"];return this.random.arrayElement(X)}event(){let X=["Super Bowl","World Series","NBA Finals","Stanley Cup","FIFA World Cup","Olympics","Wimbledon","Masters Tournament","Kentucky Derby","Indianapolis 500","Tour de France","Boston Marathon","UEFA Champions League","World Cup","The Open Championship","US Open","French Open","Australian Open"];return this.random.arrayElement(X)}league(){let X=["NFL","NBA","MLB","NHL","MLS","Premier League","La Liga","Serie A","Bundesliga","Ligue 1","UEFA","FIFA","NCAA","PGA","ATP","WTA","F1","NASCAR","IndyCar"];return this.random.arrayElement(X)}quote(){let X=["Just do it!","Winners never quit and quitters never win.","Hard work beats talent when talent doesn't work hard.","The only way to prove you're a good sport is to lose.","Champions keep playing until they get it right.","It's not whether you get knocked down, it's whether you get up.","You miss 100% of the shots you don't take.","The difference between the impossible and the possible lies in determination."];return this.random.arrayElement(X)}equipment(){let X=["Ball","Bat","Glove","Helmet","Racket","Puck","Skates","Cleats","Pads","Jersey","Goggles","Swimsuit","Bicycle","Surfboard","Skateboard","Snowboard","Skis","Golf Clubs","Tennis Racket","Boxing Gloves","Mouthguard"];return this.random.arrayElement(X)}}class $Z{random;constructor(X){this.random=X}uuid(){if(!this.random.isSeeded()&&typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();let X="0123456789abcdef",$="";for(let Z=0;Z<36;Z++)if(Z===8||Z===13||Z===18||Z===23)$+="-";else if(Z===14)$+="4";else if(Z===19){let Y=this.random.int(0,15);$+=X[Y&3|8]}else $+=X[this.random.int(0,15)];return $}nanoid(X=21){let $="";for(let Z=0;Z<X;Z++)$+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_"[this.random.int(0,63)];return $}alpha(X){let $=X?.length??10,Z=X?.casing??"mixed",Y="abcdefghijklmnopqrstuvwxyz",U="ABCDEFGHIJKLMNOPQRSTUVWXYZ",_="";if(Z==="lower")_="abcdefghijklmnopqrstuvwxyz";else if(Z==="upper")_="ABCDEFGHIJKLMNOPQRSTUVWXYZ";else _="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let Q="";for(let L=0;L<$;L++)Q+=_[this.random.int(0,_.length-1)];return Q}alphanumeric(X){let $=X?.length??10,Z=X?.casing??"mixed",Y="abcdefghijklmnopqrstuvwxyz",U="ABCDEFGHIJKLMNOPQRSTUVWXYZ",_="0123456789",Q="0123456789";if(Z==="lower")Q+="abcdefghijklmnopqrstuvwxyz";else if(Z==="upper")Q+="ABCDEFGHIJKLMNOPQRSTUVWXYZ";else Q+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let L="";for(let z=0;z<$;z++)L+=Q[this.random.int(0,Q.length-1)];return L}numeric(X=10){if(!this.random.isSeeded()){let Z="";for(let Y=0;Y<X;Y++)Z+=Math.floor(Math.random()*10);return Z}let $="";for(let Z=0;Z<X;Z++)$+=this.random.int(0,9);return $}sample(X=10){return this.alphanumeric({length:X})}symbol(X=5){let $="";for(let Z=0;Z<X;Z++)$+="!@#$%^&*()_+-=[]{}|;:,.<>?"[this.random.int(0,25)];return $}hexadecimal(X){let $=X?.length??6,Z=X?.prefix??"",Y="0123456789abcdef",U=Z;for(let _=0;_<$;_++)U+="0123456789abcdef"[this.random.int(0,15)];return U}}class H8{random;locale;constructor(X,$){this.random=X,this.locale=$}fileName(X){let $;if(this.locale?.system?.fileName)$=this.locale.system.fileName;else $=["document","report","presentation","spreadsheet","image","video","audio","backup","archive","data","config","settings","log","cache","temp","index","main","app","script","style","layout","component","module"];let Z=this.random.arrayElement($),Y=X?.extension??this.fileExtension();return`${Z}.${Y}`}fileExtension(){let X=["pdf","doc","docx","xls","xlsx","ppt","pptx","txt","csv","json","xml","jpg","jpeg","png","gif","bmp","svg","webp","ico","mp3","wav","ogg","flac","aac","m4a","mp4","avi","mov","wmv","flv","webm","mkv","zip","rar","tar","gz","7z","bz2","html","css","js","ts","jsx","tsx","vue","py","java","cpp","c","go","rs"];return this.random.arrayElement(X)}commonFileName(){let X=["README.md","package.json","tsconfig.json",".gitignore",".env","docker-compose.yml","Dockerfile","index.html","index.js","app.js","main.py","requirements.txt","Makefile","LICENSE","CHANGELOG.md","yarn.lock","package-lock.json","pom.xml"];return this.random.arrayElement(X)}mimeType(){let X=["application/json","application/xml","application/pdf","application/zip","text/html","text/css","text/javascript","text/plain","text/csv","image/jpeg","image/png","image/gif","image/svg+xml","image/webp","audio/mpeg","audio/wav","audio/ogg","audio/webm","video/mp4","video/webm","video/ogg","video/avi","application/octet-stream","multipart/form-data","application/x-www-form-urlencoded"];return this.random.arrayElement(X)}commonMimeType(){let X=["application/json","application/pdf","text/html","text/plain","text/css","image/jpeg","image/png","image/gif","audio/mpeg","video/mp4"];return this.random.arrayElement(X)}fileType(){if(this.locale?.system?.fileType)return this.random.arrayElement(this.locale.system.fileType);let X=["audio","image","text","video","application","document","spreadsheet","presentation","archive","code","data","font","executable"];return this.random.arrayElement(X)}directoryPath(){let X=["/usr/local/bin","/usr/bin","/etc","/var/log","/tmp","/home","/root","/opt","/srv","/mnt","/media","/dev","/proc","/sys","C:\\Program Files","C:\\Users","C:\\Windows","C:\\Temp","/Applications","/Library","/System","/Users","/Documents","/Downloads"];return this.random.arrayElement(X)}filePath(){return`${this.directoryPath()}/${this.fileName()}`}semver(){let X=this.random.int(0,10),$=this.random.int(0,20),Z=this.random.int(0,50);return`${X}.${$}.${Z}`}networkInterface(){let X=["eth0","eth1","wlan0","wlan1","lo","docker0","veth0","br0","tun0","tap0","enp0s3","ens33","wlp2s0","en0","en1","wlan0","WiFi","Ethernet"];return this.random.arrayElement(X)}cron(){let X=this.random.boolean(0.5)?"*":this.random.int(0,59),$=this.random.boolean(0.5)?"*":this.random.int(0,23),Z=this.random.boolean(0.5)?"*":this.random.int(1,31),Y=this.random.boolean(0.5)?"*":this.random.int(1,12),U=this.random.boolean(0.5)?"*":this.random.int(0,6);return`${X} ${$} ${Z} ${Y} ${U}`}}class C8{random;locale;constructor(X,$){this.random=X,this.locale=$}manufacturer(){if(this.locale?.vehicle?.manufacturer)return this.random.arrayElement(this.locale.vehicle.manufacturer);return this.random.arrayElement(L7)}model(){if(this.locale?.vehicle?.model)return this.random.arrayElement(this.locale.vehicle.model);return this.random.arrayElement(j7)}type(){if(this.locale?.vehicle?.type)return this.random.arrayElement(this.locale.vehicle.type);return this.random.arrayElement(E7)}fuel(){if(this.locale?.vehicle?.fuel)return this.random.arrayElement(this.locale.vehicle.fuel);return this.random.arrayElement(G7)}color(){if(this.locale?.commerce?.color)return this.random.arrayElement(this.locale.commerce.color);return this.random.arrayElement(F7)}vin(){let X="";for(let $=0;$<17;$++)X+="ABCDEFGHJKLMNPRSTUVWXYZ0123456789"[this.random.int(0,32)];return X}registration(){let X=["???-####","###-???","??? ###","##?-###","???-###"];return this.random.arrayElement(X).replace(/\?/g,()=>this.random.arrayElement("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""))).replace(/#/g,()=>String(this.random.int(0,9)))}vehicle(){let X=this.random.int(2000,2024),$=this.manufacturer(),Z=this.model();return`${X} ${$} ${Z}`}bicycle(){if(this.locale?.vehicle?.bicycle)return this.random.arrayElement(this.locale.vehicle.bicycle);let X=["Mountain Bike","Road Bike","BMX","Cruiser","Hybrid","Electric Bike","Folding Bike","Touring Bike","Cyclocross","Gravel Bike","Track Bike","Recumbent"];return this.random.arrayElement(X)}}class w8{random;locale;constructor(X,$){this.random=X,this.locale=$}adjective(){if(this.locale?.word?.adjective)return this.random.arrayElement(this.locale.word.adjective);let X=["beautiful","happy","sad","quick","slow","big","small","tall","short","long","wide","narrow","thick","thin","heavy","light","hard","soft","hot","cold","warm","cool","bright","dark","loud","quiet","strong","weak","clean","dirty","new","old","young","fresh","dry","wet","smooth","rough","sharp","dull","simple","complex","easy","difficult","good","bad","right","wrong","true","false"];return this.random.arrayElement(X)}adverb(){if(this.locale?.word?.adverb)return this.random.arrayElement(this.locale.word.adverb);let X=["quickly","slowly","carefully","easily","hardly","loudly","quietly","suddenly","finally","really","very","completely","absolutely","perfectly","badly","well","almost","always","never","often","rarely","sometimes","usually","frequently","occasionally","immediately","instantly","eventually","probably","possibly"];return this.random.arrayElement(X)}conjunction(){if(this.locale?.word?.conjunction)return this.random.arrayElement(this.locale.word.conjunction);let X=["and","but","or","nor","for","yet","so","although","because","since","unless","while","where","if","than","when","after","before","until"];return this.random.arrayElement(X)}interjection(){if(this.locale?.word?.interjection)return this.random.arrayElement(this.locale.word.interjection);let X=["wow","oh","ah","hey","oops","ouch","yay","hooray","alas","bravo","hello","goodbye","yes","no","well","hmm","uh","er","um"];return this.random.arrayElement(X)}noun(){if(this.locale?.word?.noun)return this.random.arrayElement(this.locale.word.noun);let X=["table","chair","book","pen","computer","phone","door","window","car","house","tree","flower","dog","cat","bird","fish","water","air","fire","earth","mountain","river","ocean","sky","sun","moon","star","cloud","rain","snow","person","man","woman","child","friend","family","food","music","art","book","school","work","time","day","night","morning","evening","world","life","love"];return this.random.arrayElement(X)}preposition(){if(this.locale?.word?.preposition)return this.random.arrayElement(this.locale.word.preposition);let X=["in","on","at","by","for","with","from","to","of","about","under","over","above","below","between","through","during","before","after","against","among","into","onto","upon","within","without","toward","near","beside","behind"];return this.random.arrayElement(X)}verb(){if(this.locale?.word?.verb)return this.random.arrayElement(this.locale.word.verb);let X=["run","walk","jump","swim","fly","eat","drink","sleep","work","play","read","write","speak","listen","watch","look","see","hear","think","know","want","like","love","hate","need","make","take","give","get","put","come","go","say","tell","ask","answer","help","start","stop","begin","end","open","close","show","hide","find","lose","buy","sell","learn"];return this.random.arrayElement(X)}sample(){let X=["adjective","adverb","conjunction","interjection","noun","preposition","verb"],$=this.random.arrayElement(X);return this[$]()}words(X=3){let $=[];for(let Z=0;Z<X;Z++)$.push(this.sample());return $.join(" ")}}class ZZ{seed;constructor(X){this.seed=X}isSeeded(){return this.seed!==void 0}number(){if(this.seed!==void 0)return this.seed=(this.seed*9301+49297)%233280,this.seed/233280;return Math.random()}int(X=0,$=100){return Math.floor(this.number()*($-X+1))+X}float(X=0,$=1,Z=2){let Y=this.number()*($-X)+X;return Number.parseFloat(Y.toFixed(Z))}arrayElement(X){if(X.length===0)throw Error("Cannot pick from empty array");if(this.seed===void 0)return X[Math.floor(Math.random()*X.length)];return X[this.int(0,X.length-1)]}arrayElements(X,$){if(X.length===0)return[];let Z=$??this.int(1,X.length);return[...X].sort(()=>this.number()-0.5).slice(0,Math.min(Z,X.length))}shuffle(X){let $=[...X];for(let Z=$.length-1;Z>0;Z--){let Y=this.int(0,Z);[$[Z],$[Y]]=[$[Y],$[Z]]}return $}boolean(X=0.5){return this.number()<X}replaceSymbols(X){if(this.seed===void 0){let $="";for(let Z=0;Z<X.length;Z++){let Y=X[Z];if(Y==="#")$+="0123456789"[Math.floor(Math.random()*10)];else if(Y==="?")$+=c1[Math.floor(Math.random()*26)];else $+=Y}return $}return X.replace(/[#?]/g,($)=>{if($==="#")return String(this.int(0,9));return this.arrayElement(c1)})}replaceCreditCardSymbols(X="####-####-####-####",$="#"){return X.replace(new RegExp($,"g"),()=>String(this.int(0,9)))}weightedArrayElement(X){if(X.length===0)throw Error("Cannot pick from empty weighted items array");let $=X.reduce((U,_)=>U+_.weight,0);if($<=0)throw Error("Total weight must be greater than 0");let Z=this.number()*$,Y=0;for(let U of X)if(Y+=U.weight,Z<=Y)return U.item;return X[X.length-1].item}weightedArrayElements(X,$,Z=!1){if(X.length===0)return[];let Y=$??this.int(1,X.length),U=[],_=[...X];for(let Q=0;Q<Y&&_.length>0;Q++){let L=this.weightedArrayElement(_);if(U.push(L),!Z){let z=_.findIndex((j)=>j.item===L);if(z!==-1)_.splice(z,1)}}return U}weightedBoolean(X=0.5){return this.number()<X}weightedInt(X,$,Z){let Y=$-X+1;if(Z){if(Z.length!==Y)throw Error("Weights array length must match the range size");let U=Z.map((_,Q)=>({item:X+Q,weight:_}));return this.weightedArrayElement(U)}return this.int(X,$)}}class OZ{random;_locale;_autoInstallLocales;person;address;internet;phone;company;lorem;date;number;string;color;finance;helpers;vehicle;image;git;science;music;database;food;commerce;book;animal;sport;hacker;system;word;constructor(X){let $=X?.locale??"en",Z=X?.seed;if(this._autoInstallLocales=X?.autoInstallLocales??!1,$!=="en"&&!Y9.isCached($))console.warn(`[ts-mocker] Locale '${$}' requires async loading. Use 'await Faker.create({ locale: "${$}" })' for better performance. Falling back to English.`),this._locale=Y9.loadSync("en");else this._locale=Y9.loadSync($);this.random=new ZZ(Z),this.person=new R8(this.random,this._locale),this.address=new L8(this.random,this._locale),this.internet=new V8(this.random,this._locale),this.phone=new K8(this.random,this._locale),this.company=new O8(this.random,this._locale),this.lorem=new e$(this.random),this.date=new s$(this.random),this.number=new XZ(this.random),this.string=new $Z(this.random),this.color=new G8(this.random,this._locale),this.finance=new o$(this.random),this.helpers=new a$(this.random),this.image=new t$(this.random),this.git=new r$(this.random),this.science=new D8(this.random,this._locale),this.music=new I8(this.random,this._locale),this.database=new l$(this.random),this.food=new J8(this.random,this._locale),this.commerce=new F8(this.random,this._locale),this.book=new E8(this.random,this._locale),this.animal=new j8(this.random,this._locale),this.sport=new M8(this.random,this._locale),this.hacker=new W8(this.random,this._locale),this.system=new H8(this.random,this._locale),this.word=new w8(this.random,this._locale),this.vehicle=new C8(this.random,this._locale)}static async create(X){let $=X?.locale??"en";return await Y9.load($),new OZ(X)}seed(X){return this.random=new ZZ(X),Object.assign(this.person,new R8(this.random,this._locale)),Object.assign(this.address,new L8(this.random,this._locale)),Object.assign(this.internet,new V8(this.random,this._locale)),Object.assign(this.phone,new K8(this.random,this._locale)),Object.assign(this.company,new O8(this.random,this._locale)),Object.assign(this.lorem,new e$(this.random)),Object.assign(this.date,new s$(this.random)),Object.assign(this.number,new XZ(this.random)),Object.assign(this.string,new $Z(this.random)),Object.assign(this.color,new G8(this.random,this._locale)),Object.assign(this.finance,new o$(this.random)),Object.assign(this.helpers,new a$(this.random)),Object.assign(this.image,new t$(this.random)),Object.assign(this.git,new r$(this.random)),Object.assign(this.science,new D8(this.random,this._locale)),Object.assign(this.music,new I8(this.random,this._locale)),Object.assign(this.database,new l$(this.random)),Object.assign(this.food,new J8(this.random,this._locale)),Object.assign(this.commerce,new F8(this.random,this._locale)),Object.assign(this.book,new E8(this.random,this._locale)),Object.assign(this.animal,new j8(this.random,this._locale)),Object.assign(this.sport,new M8(this.random,this._locale)),Object.assign(this.hacker,new W8(this.random,this._locale)),Object.assign(this.system,new H8(this.random,this._locale)),Object.assign(this.word,new w8(this.random,this._locale)),Object.assign(this.vehicle,new C8(this.random,this._locale)),this}async setLocale(X){return this._locale=await Y9.load(X),this.reinitializeLocaleModules(),this}setLocaleSync(X){if(!Y9.isCached(X)&&X!=="en")return console.warn(`[ts-mocker] Locale '${X}' is not loaded. Use 'await faker.setLocale("${X}")' or preload it first.`),this;return this._locale=Y9.loadSync(X),this.reinitializeLocaleModules(),this}async preloadLocales(X){return await Y9.preload(X),this}reinitializeLocaleModules(){Object.assign(this.person,new R8(this.random,this._locale)),Object.assign(this.address,new L8(this.random,this._locale)),Object.assign(this.internet,new V8(this.random,this._locale)),Object.assign(this.phone,new K8(this.random,this._locale)),Object.assign(this.company,new O8(this.random,this._locale)),Object.assign(this.food,new J8(this.random,this._locale)),Object.assign(this.animal,new j8(this.random,this._locale)),Object.assign(this.sport,new M8(this.random,this._locale)),Object.assign(this.music,new I8(this.random,this._locale)),Object.assign(this.commerce,new F8(this.random,this._locale)),Object.assign(this.book,new E8(this.random,this._locale)),Object.assign(this.vehicle,new C8(this.random,this._locale)),Object.assign(this.word,new w8(this.random,this._locale)),Object.assign(this.hacker,new W8(this.random,this._locale)),Object.assign(this.system,new H8(this.random,this._locale)),Object.assign(this.color,new G8(this.random,this._locale)),Object.assign(this.science,new D8(this.random,this._locale))}get locale(){return this._locale.title}static get availableLocales(){return Y9.getAvailableLocales()}static isLocaleLoaded(X){return Y9.isCached(X)}static async preloadLocales(X){await Y9.preload(X)}name(){return this.person.name()}email(){return this.internet.email()}}var tU,TL=(X)=>X,NL=(X,$)=>{for(var Z in $)tU(X,Z,{get:$[Z],enumerable:!0,configurable:!0,set:ZL.bind($,Z)})},w9=(X,$)=>()=>(X&&($=X(X=0)),$),eU,fX,h8,_6,qX,Q6,rZ,q8,SL,v0,J0,AL,z6,kL,L6,xL,BL,aZ,yL,j6,E6,hL,tZ,vL,bL,fL,gL,dL,P$,X7,pL,G6,cL="0.15.9",mL=()=>{},Z9,T$,P8,eZ,X1,N$,$1,Z1,T8,Y1,U1,n9,i9,_1,F6,E$,Q1,$7,z1,j9,B9,O6,J6,W6,uL=()=>{},L1,j1,YZ,E1=null,p1,lX,z9,PX,Y9,Z7,Y7,U7,_7,Q7,z7,L7,j7,E7,G7,F7,c1,m1,O7,nL=e(()=>{tU=Object.defineProperty,eU=import.meta.require,qX=w9(()=>{fX=new b1,h8=new f1,_6={createKey:YL,isEquivalent:UL,estimateMemoryUsage:_L}}),G6=w9(()=>{Q6=n$.env.CLARITY_LOG_DIR||hz(QL(),"logs"),rZ={level:"info",defaultName:"clarity",timestamp:!0,colors:!0,format:"text",maxLogSize:10485760,logDatePattern:"YYYY-MM-DD",logDirectory:Q6,rotation:{frequency:"daily",maxSize:10485760,maxFiles:5,compress:!1,rotateHour:0,rotateMinute:0,rotateDayOfWeek:0,rotateDayOfMonth:1,encrypt:!1},verbose:!1,writeToFile:!1},q8={...rZ},SL=(async()=>{try{let{loadConfig:X}=await Promise.resolve().then(()=>(j1(),L1)),$=await X({name:"clarity",alias:"logging",defaultConfig:rZ,cwd:n$.cwd()});if($)Object.assign(q8,$)}catch{}return q8})(),v0={red:(X)=>`\x1B[31m${X}\x1B[0m`,green:(X)=>`\x1B[32m${X}\x1B[0m`,yellow:(X)=>`\x1B[33m${X}\x1B[0m`,blue:(X)=>`\x1B[34m${X}\x1B[0m`,magenta:(X)=>`\x1B[35m${X}\x1B[0m`,cyan:(X)=>`\x1B[36m${X}\x1B[0m`,white:(X)=>`\x1B[37m${X}\x1B[0m`,gray:(X)=>`\x1B[90m${X}\x1B[0m`,bgRed:(X)=>`\x1B[41m${X}\x1B[0m`,bgYellow:(X)=>`\x1B[43m${X}\x1B[0m`,bgGray:(X)=>`\x1B[100m${X}\x1B[0m`,bold:(X)=>`\x1B[1m${X}\x1B[0m`,dim:(X)=>`\x1B[2m${X}\x1B[0m`,italic:(X)=>`\x1B[3m${X}\x1B[0m`,underline:(X)=>`\x1B[4m${X}\x1B[0m`,strikethrough:(X)=>`\x1B[9m${X}\x1B[0m`,reset:"\x1B[0m"},J0=v0,AL=v0.red,z6=v0.green,kL=v0.yellow,L6=v0.blue,xL=v0.magenta,BL=v0.cyan,aZ=v0.white,yL=v0.gray,j6=v0.bgRed,E6=v0.bgYellow,hL=v0.bgGray,tZ=v0.bold,vL=v0.dim,bL=v0.italic,fL=v0.underline,gL=v0.strikethrough,dL=v0.reset,P$={activationLevel:"error",bufferSize:50,flushOnDeactivation:!0,stopBuffering:!1},X7={debug:"\uD83D\uDD0D",info:L6("\u2139"),success:z6("\u2713"),warning:E6(aZ(tZ(" WARN "))),error:j6(aZ(tZ(" ERROR ")))},pL=new i$("stacks")}),i9=w9(()=>{Z9=class extends Error{timestamp;context;constructor(X,$={}){super(X);if(this.name=this.constructor.name,this.timestamp=new Date,this.context=$,Error.captureStackTrace)Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,code:this.code,message:this.message,timestamp:this.timestamp.toISOString(),context:this.context,stack:this.stack}}toString(){let X=Object.keys(this.context).length>0?` (${Object.entries(this.context).map(([$,Z])=>`${$}: ${Z}`).join(", ")})`:"";return`${this.name} [${this.code}]: ${this.message}${X}`}},T$=class extends Z9{code="CONFIG_NOT_FOUND";constructor(X,$,Z){let Y=Z===void 0?[]:Array.isArray(Z)?Z.filter(Boolean):[Z],U="";if(Y.length===1)U=` or alias "${Y[0]}"`;else if(Y.length>1)U=` or aliases ${Y.map((_)=>`"${_}"`).join(", ")}`;super(`Configuration "${X}"${U} not found`,{configName:X,alias:Z,searchPaths:$,searchPathCount:$.length})}},P8=class extends Z9{code="CONFIG_LOAD_ERROR";constructor(X,$,Z){super(`Failed to load configuration from "${X}": ${$.message}`,{configPath:X,configName:Z,originalError:$.name,originalMessage:$.message});this.cause=$}},eZ=class extends Z9{code="CONFIG_VALIDATION_ERROR";constructor(X,$,Z){super(`Configuration validation failed for "${X}"`,{configPath:X,configName:Z,validationErrors:$,errorCount:$.length})}},X1=class extends Z9{code="CONFIG_MERGE_ERROR";constructor(X,$,Z,Y){super(`Failed to merge configuration from "${X}" with "${$}": ${Z.message}`,{sourcePath:X,targetPath:$,configName:Y,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},N$=class extends Z9{code="ENV_VAR_ERROR";constructor(X,$,Z,Y){super(`Failed to parse environment variable "${X}" with value "${$}" as ${Z}`,{envKey:X,envValue:$,expectedType:Z,configName:Y})}},$1=class extends Z9{code="FILE_SYSTEM_ERROR";constructor(X,$,Z){super(`File system ${X} failed for "${$}": ${Z.message}`,{operation:X,path:$,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},Z1=class extends Z9{code="TYPE_GENERATION_ERROR";constructor(X,$,Z){super(`Failed to generate types from "${X}" to "${$}": ${Z.message}`,{configDir:X,outputPath:$,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},T8=class extends Z9{code="SCHEMA_VALIDATION_ERROR";constructor(X,$,Z){super(`Schema validation failed${Z?` for config "${Z}"`:""}`,{schemaPath:X,configName:Z,validationErrors:$,errorCount:$.length})}},Y1=class extends Z9{code="BROWSER_CONFIG_ERROR";constructor(X,$,Z,Y){super(`Failed to fetch configuration from "${X}": ${$} ${Z}`,{endpoint:X,status:$,statusText:Z,configName:Y})}},U1=class extends Z9{code="PLUGIN_ERROR";constructor(X,$,Z){super(`Plugin "${X}" failed during ${$}: ${Z.message}`,{pluginName:X,operation:$,originalError:Z.name,originalMessage:Z.message});this.cause=Z}},n9={configNotFound(X,$,Z){return new T$(X,$,Z)},configLoad(X,$,Z){return new P8(X,$,Z)},configValidation(X,$,Z){return new eZ(X,$,Z)},configMerge(X,$,Z,Y){return new X1(X,$,Z,Y)},envVar(X,$,Z,Y){return new N$(X,$,Z,Y)},fileSystem(X,$,Z){return new $1(X,$,Z)},typeGeneration(X,$,Z){return new Z1(X,$,Z)},schemaValidation(X,$,Z){return new T8(X,$,Z)},browserConfig(X,$,Z,Y){return new Y1(X,$,Z,Y)},plugin(X,$,Z){return new U1(X,$,Z)}}}),_1=w9(()=>{qX(),i9()}),E$=w9(()=>{F6={replace:"replace",concat:"concat",smart:"smart"}}),Q1=w9(()=>{qX(),i9(),E$()}),z1=w9(()=>{qX(),i9(),$7=/^https?:\/\//}),W6=w9(()=>{G6(),mL(),qX(),i9(),_1(),Q1(),z1(),E$(),j9=new i$("bunfig",{showTags:!0}),B9=new d1,O6=r0($X.cwd(),"config"),J6=r0($X.cwd(),"src/generated")}),L1={},NL(L1,{withErrorRecovery:()=>uU,tryLoadConfig:()=>RL,loadConfigWithResult:()=>VL,loadConfig:()=>V5,isRetryableError:()=>jL,isConfigNotFoundError:()=>LL,isBunfigError:()=>nU,globalPerformanceMonitor:()=>h8,globalCache:()=>fX,getEnvOrDefault:()=>EL,generateConfigTypes:()=>KL,defaultGeneratedDir:()=>J6,defaultConfigDir:()=>O6,deepMergeWithArrayStrategy:()=>J5,deepMerge:()=>iU,createLibraryConfig:()=>DL,config:()=>IL,bunfigPlugin:()=>ML,applyEnvVarsToConfig:()=>X8,TypeGenerationError:()=>Z1,SchemaValidationError:()=>T8,PluginError:()=>U1,PerformanceMonitor:()=>f1,FileSystemError:()=>$1,ErrorFactory:()=>n9,EnvVarError:()=>N$,EnvProcessor:()=>GZ,ConfigValidator:()=>W5,ConfigValidationError:()=>eZ,ConfigNotFoundError:()=>T$,ConfigMergeError:()=>X1,ConfigLoader:()=>d1,ConfigLoadError:()=>P8,ConfigFileLoader:()=>FZ,ConfigCache:()=>b1,CacheUtils:()=>_6,BunfigError:()=>Z9,BrowserConfigError:()=>Y1,ArrayMergeStrategies:()=>F6}),j1=w9(()=>{W6(),i9(),qX(),i9(),uL(),_1(),Q1(),z1(),E$()}),j1(),YZ={verbose:!1,locale:"en",autoInstallLocales:!1},p1=YZ,lX={title:"English",person:{firstNameMale:["James","John","Robert","Michael","William","David","Richard","Joseph","Thomas","Charles","Christopher","Daniel","Matthew","Anthony","Mark","Donald","Steven","Paul","Andrew","Joshua","Kenneth","Kevin","Brian","George","Timothy","Ronald","Edward","Jason","Jeffrey","Ryan","Jacob","Gary","Nicholas","Eric","Jonathan","Stephen","Larry","Justin","Scott","Brandon","Benjamin","Samuel","Raymond","Gregory","Frank","Alexander","Patrick","Jack","Dennis","Jerry","Liam","Noah","Oliver","Elijah","Lucas","Mason","Logan","Ethan","Henry","Jackson","Sebastian","Aiden","Carter","Owen","Wyatt","Luke","Jayden","Dylan","Grayson","Levi","Isaac","Gabriel","Julian","Mateo","Jaxon","Lincoln"],firstNameFemale:["Mary","Patricia","Jennifer","Linda","Elizabeth","Barbara","Susan","Jessica","Sarah","Karen","Lisa","Nancy","Betty","Margaret","Sandra","Ashley","Kimberly","Emily","Donna","Michelle","Dorothy","Carol","Amanda","Melissa","Deborah","Stephanie","Rebecca","Sharon","Laura","Cynthia","Kathleen","Amy","Angela","Shirley","Anna","Brenda","Pamela","Emma","Nicole","Helen","Olivia","Ava","Isabella","Sophia","Mia","Charlotte","Amelia","Harper","Evelyn","Abigail","Sofia","Ella","Scarlett","Grace","Chloe","Victoria","Aria","Lily","Aubrey","Zoey","Penelope","Lillian","Addison","Layla","Natalie","Camila"],firstNameNeutral:["Taylor","Jordan","Alex","Riley","Casey","Morgan","Avery","Quinn","Blake","Cameron","Sage","River","Phoenix","Rowan","Skyler","Charlie","Finley","Peyton","Reese","Kai"],lastName:["Smith","Johnson","Williams","Brown","Jones","Garcia","Miller","Davis","Rodriguez","Martinez","Hernandez","Lopez","Gonzalez","Wilson","Anderson","Thomas","Taylor","Moore","Jackson","Martin","Lee","Perez","Thompson","White","Harris","Sanchez","Clark","Ramirez","Lewis","Robinson","Walker","Young","Allen","King","Wright","Scott","Torres","Nguyen","Hill","Flores","Green","Adams","Nelson","Baker","Hall","Rivera","Campbell","Mitchell","Carter","Roberts","Gomez","Phillips","Evans","Turner","Diaz","Parker","Cruz","Edwards","Collins","Reyes","Stewart","Morris","Morales","Murphy","Cook","Rogers","Gutierrez","Ortiz","Morgan","Cooper","Peterson","Bailey","Reed","Kelly","Howard","Ramos","Kim","Cox","Ward","Richardson","Watson","Brooks","Chavez","Wood","James","Bennett","Gray","Mendoza","Ruiz","Hughes","Price","Alvarez","Castillo","Sanders","Patel","Myers","Long","Ross","Foster","Jimenez"],prefix:["Mr.","Mrs.","Ms.","Miss","Dr.","Prof."],suffix:["Jr.","Sr.","I","II","III","IV","V","MD","PhD","DDS"],gender:["Male","Female","Non-binary","Agender","Bigender","Genderfluid","Genderqueer"],jobTitle:["Software Engineer","Product Manager","Designer","Data Scientist","DevOps Engineer","Marketing Manager","Sales Representative","Accountant","Human Resources Manager","CEO","CTO","CFO","COO","Director","Manager","Analyst","Consultant","Administrator","Coordinator","Specialist","Developer","Architect","Engineer","Technician","Assistant","Project Manager","Business Analyst","Quality Assurance Engineer","UX Designer","UI Designer","Backend Developer","Frontend Developer","Full Stack Developer","Mobile Developer","Cloud Architect","Security Engineer","Network Engineer","Database Administrator","Systems Administrator","Technical Writer","Scrum Master","Product Owner","Release Manager","Content Manager","Social Media Manager","SEO Specialist","Digital Marketing Specialist","Growth Hacker","Brand Manager","Creative Director","Financial Analyst","Investment Banker","Risk Analyst","Compliance Officer","Tax Consultant","Legal Counsel","Paralegal","Executive Assistant","Operations Manager","Supply Chain Manager","Logistics Coordinator","Customer Success Manager","Account Executive","Sales Engineer","Technical Support"]},address:{street:["Main","Oak","Maple","Cedar","Elm","Washington","Lake","Hill","Park","River","Sunset","Pine","Walnut","Highland","Madison","Lincoln","Jackson","Franklin"],city:["New York","Los Angeles","Chicago","Playa Vista","Houston","Phoenix","Philadelphia","San Antonio","San Diego","Dallas","San Jose","Austin","Jacksonville","Fort Worth","Columbus","Charlotte","San Francisco","Indianapolis","Seattle","Denver","Boston","Nashville","Detroit","Memphis","Portland","Oklahoma City","Las Vegas","Louisville","Baltimore","Milwaukee","Albuquerque","Tucson","Fresno","Sacramento","Mesa","Kansas City","Atlanta","Long Beach","Colorado Springs","Raleigh","Miami","Virginia Beach","Omaha","Oakland","Minneapolis","Tulsa","Arlington","Tampa","New Orleans","Wichita","Cleveland","Bakersfield","Aurora","Anaheim","Honolulu","Santa Ana","Riverside","Corpus Christi","Lexington","Stockton","Henderson","Saint Paul","Cincinnati","Pittsburgh","Greensboro","Anchorage","Plano","Lincoln","Orlando","Irvine","Newark","Durham","Chula Vista","Toledo","Fort Wayne","St. Petersburg","Laredo","Jersey City"],state:["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"],stateAbbr:["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"],country:["United States","Canada","United Kingdom","Australia","Germany","France","Spain","Italy","Japan","China","India","Brazil","Mexico","Russia","South Korea"],countryCode:["US","CA","GB","AU","DE","FR","ES","IT","JP","CN","IN","BR","MX","RU","KR"],zipCode:["#####","#####-####"],buildingNumber:["###","####","#","##"],direction:["North","East","South","West","Northeast","Northwest","Southeast","Southwest"],streetSuffix:["Street","Avenue","Road","Boulevard","Drive","Court","Circle","Lane","Way","Place","Terrace","Parkway","Commons","Trail","Square","Run","Crossing"]},company:{name:["TechCorp","GlobalSoft","DataSystems","CloudNet","Innovate Inc","Digital Solutions","NextGen Tech","FutureTech","SmartSystems","CoreTech","PrimeSoft","AlphaTech"],suffix:["Inc","LLC","Corp","Group","Ltd","Co","Technologies","Solutions","Systems"],industry:["Technology","Finance","Healthcare","Education","Retail","Manufacturing","Telecommunications","Energy","Real Estate","Transportation","Media","Hospitality"],buzzwords:["synergize","leverage","innovate","disrupt","optimize","streamline","transform","revolutionize","empower","enable","facilitate","orchestrate","integrate"],adjective:["revolutionary","cutting-edge","innovative","next-generation","advanced","leading","premier","world-class","enterprise","scalable","robust","seamless"],descriptor:["global","digital","cloud-based","AI-powered","data-driven","user-centric","agile","secure","efficient","intelligent","automated","integrated"],noun:["solution","platform","system","service","technology","framework","infrastructure","application","network","portal","ecosystem","architecture","engine"]},internet:{domainSuffix:["com","net","org","io","co","app","dev","tech","ai","cloud"],freeEmail:["gmail.com","yahoo.com","hotmail.com","outlook.com","icloud.com","proton.me"]},phone:{formats:["###-###-####","(###) ###-####","1-###-###-####","+1-###-###-####","###.###.####"]},food:{dish:["Hamburger","Cheeseburger","Pizza","Hot Dog","Fried Chicken","BBQ Ribs","Mac and Cheese","Grilled Cheese","BLT Sandwich","Caesar Salad","Cobb Salad","Chicken Wings","Nachos","Tacos","Burrito","Quesadilla","Fish and Chips","Clam Chowder","Lobster Roll","Cheesesteak","Pulled Pork Sandwich","Buffalo Wings","Meatloaf","Pot Roast","Fried Catfish","Jambalaya","Gumbo","Po' Boy","Corn Dog","Chili","Baked Beans","Cornbread","Biscuits and Gravy"],ingredient:["Flour","Sugar","Salt","Pepper","Butter","Eggs","Milk","Cheese","Tomato","Onion","Garlic","Olive Oil","Chicken","Beef","Pork","Fish","Rice","Pasta","Bread","Potato","Carrot","Celery","Bell Pepper","Mushroom","Spinach","Broccoli","Lettuce","Avocado","Lemon","Lime","Basil","Oregano","Thyme","Rosemary","Parsley","Cilantro"],cuisine:["American","Italian","Mexican","Chinese","Japanese","Thai","Indian","French","Greek","Spanish","Mediterranean","Vietnamese","Korean","Turkish","Lebanese","Brazilian","Argentinian","Peruvian","Caribbean","Moroccan","Ethiopian"],dessert:["Apple Pie","Chocolate Cake","Ice Cream","Brownies","Cookies","Cheesecake","Donuts","Cupcakes","Tiramisu","Panna Cotta","Cr\xE8me Br\xFBl\xE9e","Macarons","Churros","Flan","Bread Pudding","Pecan Pie","Key Lime Pie","Banana Split","Sundae","Milkshake"],fruit:["Apple","Banana","Orange","Strawberry","Grape","Watermelon","Pineapple","Mango","Peach","Pear","Cherry","Blueberry","Raspberry","Blackberry","Kiwi","Plum","Apricot","Cantaloupe","Honeydew","Papaya","Guava","Lychee","Dragon Fruit"],vegetable:["Carrot","Broccoli","Cauliflower","Spinach","Kale","Lettuce","Cabbage","Cucumber","Tomato","Bell Pepper","Zucchini","Eggplant","Asparagus","Green Beans","Peas","Corn","Potato","Sweet Potato","Onion","Garlic","Celery","Radish","Beet"],meat:["Beef","Chicken","Pork","Lamb","Turkey","Duck","Veal","Venison","Bison","Bacon","Sausage","Ham","Salami","Prosciutto","Ribeye","Sirloin","Tenderloin"],spice:["Black Pepper","Cumin","Paprika","Cinnamon","Nutmeg","Ginger","Turmeric","Curry","Chili Powder","Cayenne","Oregano","Basil","Thyme","Rosemary","Sage","Coriander","Cardamom","Cloves","Allspice","Bay Leaf","Mustard Seed","Fennel","Star Anise"]},animal:{dog:["Labrador Retriever","German Shepherd","Golden Retriever","French Bulldog","Bulldog","Poodle","Beagle","Rottweiler","German Shorthaired Pointer","Dachshund","Pembroke Welsh Corgi","Australian Shepherd","Yorkshire Terrier","Cavalier King Charles Spaniel","Doberman Pinscher","Boxer","Miniature Schnauzer","Great Dane","Siberian Husky","Bernese Mountain Dog","Pomeranian","Boston Terrier","Havanese","Shetland Sheepdog","Brittany","Cocker Spaniel"],cat:["Persian","Maine Coon","Ragdoll","Bengal","Siamese","British Shorthair","Abyssinian","Birman","Oriental Shorthair","Sphynx","Devon Rex","American Shorthair","Scottish Fold","Exotic Shorthair","Russian Blue","Norwegian Forest Cat","Siberian","Burmese","Manx","Cornish Rex","Himalayan","Turkish Angora","Balinese","Tonkinese"],bird:["Parakeet","Cockatiel","Lovebird","Canary","Finch","Parrot","Macaw","Cockatoo","African Grey","Conure","Budgie","Dove","Pigeon","Robin","Cardinal","Blue Jay","Sparrow","Crow","Raven","Hawk","Eagle","Owl","Hummingbird","Woodpecker"],fish:["Goldfish","Betta","Guppy","Molly","Platy","Swordtail","Tetra","Angelfish","Discus","Gourami","Barb","Danio","Koi","Oscar","Cichlid","Clownfish","Tang","Damselfish","Wrasse","Goby","Blenny","Pufferfish","Lionfish"],horse:["Arabian","Thoroughbred","Quarter Horse","Appaloosa","Paint","Tennessee Walker","Morgan","Andalusian","Friesian","Clydesdale","Percheron","Belgian","Mustang","Shetland Pony","Welsh Pony","Palomino","Buckskin","Pinto","Warmblood"],rabbit:["Holland Lop","Netherland Dwarf","Mini Rex","Flemish Giant","English Lop","French Lop","Angora","Dutch","Lionhead","Rex","Polish","Himalayan"],insect:["Butterfly","Bee","Ant","Beetle","Ladybug","Dragonfly","Grasshopper","Cricket","Moth","Firefly","Praying Mantis","Walking Stick","Caterpillar","Wasp"],type:["Dog","Cat","Bird","Fish","Rabbit","Hamster","Guinea Pig","Mouse","Rat","Ferret","Chinchilla","Hedgehog","Turtle","Lizard","Snake","Frog"]},sport:{sport:["Football","Basketball","Baseball","Soccer","Tennis","Golf","Hockey","Boxing","Wrestling","Swimming","Track and Field","Volleyball","Cricket","Rugby","Lacrosse","Badminton","Table Tennis","Bowling","Skiing","Snowboarding","Surfing","Skateboarding"],team:["Lakers","Warriors","Bulls","Celtics","Yankees","Red Sox","Cowboys","Patriots","49ers","Packers","Steelers","Maple Leafs","Bruins","Canadiens","Blackhawks"],athlete:["Michael Jordan","LeBron James","Tom Brady","Serena Williams","Tiger Woods","Muhammad Ali","Babe Ruth","Wayne Gretzky","Usain Bolt","Michael Phelps"]},music:{genre:["Rock","Pop","Hip Hop","Jazz","Blues","Country","Electronic","Classical","R&B","Soul","Funk","Reggae","Metal","Punk","Indie","Alternative","Folk","Disco","House","Techno","Dubstep","Trap","Gospel","Opera"],artist:["The Beatles","Elvis Presley","Michael Jackson","Madonna","Prince","Bob Dylan","Led Zeppelin","Pink Floyd","Queen","David Bowie","The Rolling Stones","Nirvana","Bruce Springsteen","Stevie Wonder","Aretha Franklin","Ray Charles","Johnny Cash"],song:["Bohemian Rhapsody","Imagine","Hey Jude","Billie Jean","Like a Rolling Stone","Smells Like Teen Spirit","Hotel California","Sweet Child O' Mine","Stairway to Heaven","Purple Haze","What's Going On","Respect","I Want to Hold Your Hand"],instrument:["Guitar","Piano","Drums","Bass","Violin","Cello","Saxophone","Trumpet","Flute","Clarinet","Trombone","Harp","Banjo","Mandolin","Ukulele","Harmonica","Accordion","Xylophone","Synthesizer","Keyboard"]},commerce:{product:["Chair","Table","Lamp","Sofa","Bed","Desk","Computer","Phone","Tablet","Watch","Shoes","Shirt","Pants","Jacket","Hat","Gloves","Bag","Wallet","Sunglasses","Bicycle","Car","Motorcycle","Camera","Headphones","Speaker"],productAdjective:["Small","Medium","Large","Ergonomic","Rustic","Modern","Sleek","Lightweight","Durable","Handmade","Recycled","Refined","Gorgeous","Incredible","Practical","Fantastic","Awesome","Generic","Unbranded","Licensed","Intelligent","Tasty"],productMaterial:["Steel","Wood","Concrete","Plastic","Cotton","Granite","Rubber","Metal","Soft","Fresh","Frozen","Aluminum","Leather","Silk","Wool","Linen"],department:["Electronics","Clothing","Home & Garden","Sports","Automotive","Books","Toys","Health & Beauty","Grocery","Jewelry","Tools","Music","Movies","Baby","Pet Supplies"],color:["Red","Blue","Green","Yellow","Black","White","Gray","Silver","Gold","Purple","Pink","Orange","Brown","Navy","Teal","Maroon","Olive"]},book:{title:["To Kill a Mockingbird","1984","Pride and Prejudice","The Great Gatsby","Moby Dick","War and Peace","The Odyssey","The Catcher in the Rye","The Lord of the Rings","Harry Potter and the Sorcerer's Stone","The Hobbit","Brave New World","Crime and Punishment","The Brothers Karamazov","One Hundred Years of Solitude"],author:["Ernest Hemingway","F. Scott Fitzgerald","Jane Austen","Charles Dickens","Mark Twain","Leo Tolstoy","Fyodor Dostoevsky","George Orwell","J.R.R. Tolkien","J.K. Rowling","Stephen King","Agatha Christie","William Shakespeare","Edgar Allan Poe","Harper Lee"],publisher:["Penguin Random House","HarperCollins","Simon & Schuster","Macmillan","Hachette","Scholastic","Oxford University Press","Cambridge University Press","Bloomsbury","Vintage"],genre:["Fiction","Non-Fiction","Mystery","Thriller","Romance","Science Fiction","Fantasy","Horror","Historical Fiction","Biography","Self-Help","Poetry","Drama","Adventure","Young Adult"],series:["Harry Potter","The Lord of the Rings","A Song of Ice and Fire","The Hunger Games","Twilight","The Chronicles of Narnia","Percy Jackson","Discworld","Dune","Foundation"],review:["A masterpiece of modern literature!","Gripping from start to finish.","Couldn't put it down!","A must-read for everyone.","Beautifully written and deeply moving.","An unforgettable story.","Brilliant and thought-provoking.","One of the best books I've ever read."]},vehicle:{manufacturer:["Toyota","Ford","Chevrolet","Honda","Nissan","BMW","Mercedes-Benz","Audi","Volkswagen","Tesla","Volvo","Porsche","Jeep","Mazda","Subaru"],model:["Accord","Camry","Civic","Corolla","CR-V","F-150","RAV4","Model 3","Model Y","3 Series","C-Class","A4","Golf","Mustang","Wrangler"],type:["Sedan","SUV","Truck","Coupe","Convertible","Hatchback","Wagon","Van","Minivan","Crossover","Sports Car","Electric","Hybrid"],fuel:["Gasoline","Diesel","Electric","Hybrid","Plug-in Hybrid","Hydrogen","Ethanol","Biodiesel"],bicycle:["Mountain Bike","Road Bike","BMX","Cruiser","Hybrid","Electric Bike","Folding Bike","Gravel Bike"]},word:{adjective:["beautiful","happy","sad","quick","slow","big","small","tall","short","long","wide","narrow","thick","thin","heavy","light","hard","soft","hot","cold"],adverb:["quickly","slowly","carefully","easily","hardly","loudly","quietly","suddenly","finally","really","very","completely","absolutely","perfectly","badly","well"],conjunction:["and","but","or","nor","for","yet","so","although","because","since","unless","while","when","if"],interjection:["wow","oh","ah","hey","oops","ouch","yay","hooray","hello","goodbye","yes","no"],noun:["table","chair","book","pen","computer","phone","door","window","car","house","tree","flower","dog","cat","bird","fish","water","fire","sun","moon"],preposition:["in","on","at","by","for","with","from","to","of","about","under","over","above","below","between","through"],verb:["run","walk","jump","swim","fly","eat","drink","sleep","work","play","read","write","speak","listen","watch","think","know","make","take","give"]},hacker:{abbreviation:["TCP","HTTP","RAM","GB","CSS","SSL","SQL","CLI","UI","UX","FTP","API","DNS","IP","LAN","WAN","VPN","SSH","JSON","REST"],adjective:["auxiliary","primary","back-end","digital","open-source","virtual","cross-platform","redundant","online","wireless","mobile","neural","optical","cloud","quantum"],noun:["driver","protocol","bandwidth","panel","microchip","program","port","card","interface","system","sensor","firewall","pixel","application","server","database","network"],verb:["bypass","hack","override","compress","copy","navigate","index","connect","generate","calculate","synthesize","transmit","program","parse","compile","encrypt","decrypt"],ingverb:["bypassing","hacking","overriding","compressing","copying","navigating","indexing","connecting","generating","calculating","synthesizing","transmitting","programming","parsing","compiling","encrypting"],phrase:["We need to bypass the digital firewall!","Try to hack the TCP protocol!","The SSL port is down, override the wireless system!","You can't compress the bandwidth without indexing the neural network!"]},system:{fileName:["document","report","presentation","spreadsheet","image","video","audio","backup","archive","data","config","settings","log","cache"],fileType:["audio","image","text","video","application","document","spreadsheet","presentation","archive","code"]},science:{chemicalElement:["Hydrogen","Helium","Lithium","Carbon","Nitrogen","Oxygen","Fluorine","Neon","Sodium","Magnesium","Aluminum","Silicon","Phosphorus","Sulfur","Chlorine","Iron","Copper","Zinc","Silver","Gold"],unit:["meter","kilogram","second","ampere","kelvin","mole","candela","newton","pascal","joule","watt","volt","ohm","hertz","celsius"],constant:["Speed of Light","Gravitational Constant","Planck Constant","Boltzmann Constant","Avogadro Constant","Elementary Charge","Gas Constant"],field:["Physics","Chemistry","Biology","Astronomy","Geology","Ecology","Genetics","Neuroscience","Biochemistry","Microbiology","Botany","Zoology"]}},z9=new Map,PX=new Map,Y9=class{static AVAILABLE_BASE_LOCALES=["af","ar","az","cs","da","de","en","eo","es","fa","fi","fr","he","hi","it","ja","ko","nl","no","pl","pt","sv","tl","tr","uk","zh","zu"];static AVAILABLE_LOCALE_VARIANTS=["af_ZA","de_AT","de_CH","de_DE","en_AU","en_CA","en_GB","en_GH","en_HK","en_IE","en_IN","en_NG","en_US","en_ZA","es_ES","es_MX","fr_BE","fr_CA","fr_CH","fr_FR","fr_LU","fr_SN","pt_BR","pt_MZ","pt_PT","zh_CN","zh_TW","zu_ZA"];static getAvailableLocales(){return[...this.AVAILABLE_BASE_LOCALES,...this.AVAILABLE_LOCALE_VARIANTS]}static getAvailableBaseLocales(){return this.AVAILABLE_BASE_LOCALES}static getAvailableLocaleVariants(){return this.AVAILABLE_LOCALE_VARIANTS}static async load($){let Z=kX($).normalized;if(Z==="en"){if(!z9.has("en"))z9.set("en",lX);return lX}if(z9.has(Z))return z9.get(Z);if(PX.has(Z))return PX.get(Z);let Y=this.loadLocaleWithFallback(Z);PX.set(Z,Y);try{let U=await Y;return z9.set(Z,U),U}finally{PX.delete(Z)}}static loadSync($){let Z=kX($).normalized;if(Z==="en"){if(!z9.has("en"))z9.set("en",lX);return lX}if(z9.has(Z))return z9.get(Z);throw Error(`Locale '${$}' is not loaded. Please use async loading with faker.setLocale('${$}') or preload it.`)}static isCached($){let Z=kX($).normalized;return z9.has(Z)}static async preload($){await Promise.all($.map((Z)=>this.load(Z)))}static clearCache(){z9.clear(),PX.clear()}static async loadLocaleWithFallback($){let Z=CL($);for(let Y=0;Y<Z.length;Y++){let U=Z[Y],_=Y===0&&Z.length>1,Q=!_;try{if(_){let L=await this.loadLocaleModule(U),z=Z[1];try{let j=await this.loadLocaleModule(z);return oU(j,L)}catch{return L}}else return await this.loadLocaleModule(U)}catch(L){if(Y===Z.length-1)throw L;continue}}throw Error(`Failed to load locale '${$}' with fallback chain: ${Z.join(" \u2192 ")}`)}static async tryWorkspaceImport($,Z){if(!xX())return null;try{let Y=await import(`../../${Z.packageName}/dist/index.js`);return Y[Z.normalized]||Y[Z.language]||Y.default}catch{try{let Y=yz.cwd(),U=Bz(Y,"packages",Z.packageName,"dist","index.js");if(!xz(U))return null;let _=await import(`file://${U}`);return _[Z.normalized]||_[Z.language]||_.default}catch{return null}}}static async loadLocaleModule($){let Z=wL($),Y=kX($);try{let U=await import(Z);return U[Y.normalized]||U[Y.language]||U.default}catch(U){let _=U instanceof Error?U.message:String(U);if(_.includes("Cannot find")||_.includes("not found")||_.includes("ModuleNotFound")){if(xX()&&Z.startsWith("@mock-locale/")){let Q=await this.tryWorkspaceImport($,Y);if(Q)return Q}if(p1.autoInstallLocales)if(console.log(`
|
|
459
|
-
\uD83D\uDD0D Locale '${$}' not found. Auto-installing ${Z}...`),aU(Z)){if(xX()&&Z.startsWith("@mock-locale/")){let Q=await this.tryWorkspaceImport($,Y);if(Q)return Q}try{let Q=await import(Z);return Q[Y.normalized]||Q[Y.language]||Q.default}catch(Q){if(xX()&&Z.startsWith("@mock-locale/")){let L=await this.tryWorkspaceImport($,Y);if(L)return L;throw Error(`Locale '${$}' workspace package is not properly built or linked. Please ensure the package is built with 'bun run build' in the ${Z.replace("@mock-locale/","packages/")} directory.`)}throw Error(`Failed to load locale '${$}' after installation: ${Q instanceof Error?Q.message:String(Q)}`)}}else throw Error(`Failed to auto-install locale '${$}'. Please install manually with: bun add ${Z}`);throw Error(`Locale '${$}' is not installed. Install it with: bun add ${Z}
|
|
460
|
-
Or install all locales with: bun add @mock-locale/{af,ar,az,cs,da,de,en,eo,es,fa,fi,fr,he,hi,it,ja,ko,nl,no,pl,pt,sv,tl,tr,uk,zh,zu}
|
|
461
|
-
Or enable auto-install in your mock.config.ts: { autoInstallLocales: true }`)}throw Error(`Failed to load locale '${$}': ${_}`)}}},Z7=new I5,Y7={email:(X)=>{return/^[^\s@]+@[^\s@][^\s.@]*\.[^\s@]+$/.test(X)},phone:(X)=>{let $=/^\+?[1-9]\d{0,15}$/,Z=X.replace(/[\s\-()]/g,"");return Z.length>=7&&$.test(Z)},name:(X)=>{return/^[a-z\s\-']+$/i.test(X)&&X.length>=2&&X.length<=50},age:(X)=>{return Number.isInteger(X)&&X>=0&&X<=150},url:(X)=>{try{let $=new URL(X);return X.startsWith("http://")||X.startsWith("https://")}catch{return!1}},regex:(X)=>($)=>{return X.test($)},length:(X,$)=>(Z)=>{return Z.length>=X&&Z.length<=$},range:(X,$)=>(Z)=>{return Z>=X&&Z<=$}},U7={phoneByCountry:{field:"phone",dependsOn:"country",mapping:{"United States":"+1-###-###-####","United Kingdom":"+44 #### ### ###",Germany:"+49 ### ########",France:"+33 # ## ## ## ##",Spain:"+34 ### ## ## ##",Italy:"+39 ### ### ###",Japan:"+81 ##-####-####",China:"+86 ### #### ####",Australia:"+61 ### ### ###",Canada:"+1-###-###-####"}},postalCodeByCountry:{field:"postalCode",dependsOn:"country",mapping:{"United States":"#####","United Kingdom":"AA## #AA",Germany:"#####",France:"#####",Spain:"#####",Italy:"#####",Japan:"###-####",China:"######",Australia:"####",Canada:"A#A #A#"}},firstNameByGender:{field:"firstName",dependsOn:"gender",mapping:{male:["John","Michael","David","James","Robert","William","Richard","Thomas","Christopher","Daniel"],female:["Mary","Patricia","Jennifer","Linda","Elizabeth","Barbara","Susan","Jessica","Sarah","Karen"]}}},_7={commonFirstNames:{items:[{item:"John",weight:100},{item:"Michael",weight:85},{item:"David",weight:80},{item:"James",weight:75},{item:"Robert",weight:70},{item:"William",weight:65},{item:"Richard",weight:60},{item:"Thomas",weight:55},{item:"Christopher",weight:50},{item:"Daniel",weight:45}]},ageDistribution:{items:[{item:25,weight:80},{item:30,weight:90},{item:35,weight:95},{item:40,weight:100},{item:45,weight:85},{item:50,weight:70},{item:55,weight:55},{item:60,weight:40},{item:65,weight:25},{item:70,weight:15}]},countryDistribution:{items:[{item:"United States",weight:100},{item:"China",weight:95},{item:"India",weight:90},{item:"Brazil",weight:60},{item:"Russia",weight:55},{item:"Japan",weight:50},{item:"Germany",weight:45},{item:"United Kingdom",weight:40},{item:"France",weight:35},{item:"Italy",weight:30}]}},Q7=[".","_","-",""],z7=["lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit","sed","do","eiusmod","tempor","incididunt","ut","labore","et","dolore","magna","aliqua","enim","ad","minim","veniam","quis","nostrud","exercitation","ullamco","laboris","nisi","aliquip","ex","ea","commodo","consequat","duis","aute","irure","in","reprehenderit","voluptate","velit","esse","cillum","fugiat","nulla","pariatur","excepteur","sint","occaecat","cupidatat","non","proident","sunt","culpa","qui","officia","deserunt","mollit","anim","id","est","laborum"],L7=["Toyota","Ford","Chevrolet","Honda","Nissan","BMW","Mercedes-Benz","Audi","Volkswagen","Hyundai","Kia","Mazda","Subaru","Lexus","Tesla","Volvo","Porsche","Jeep","Ram","GMC","Dodge","Chrysler","Buick","Cadillac","Acura","Infiniti","Genesis","Land Rover","Jaguar","Mini"],j7=["Accord","Camry","Civic","Corolla","CR-V","F-150","RAV4","Silverado","Tacoma","Altima","Sentra","Rogue","Model 3","Model Y","Model S","X5","X3","3 Series","5 Series","C-Class","E-Class","A4","Q5","Golf","Jetta","Passat","Tiguan","Escape","Explorer","Mustang","Ranger","Malibu","Equinox","Traverse","Wrangler","Grand Cherokee","Cherokee","Compass"],E7=["Sedan","SUV","Truck","Coupe","Convertible","Hatchback","Wagon","Van","Minivan","Crossover","Sports Car","Luxury","Electric","Hybrid","Diesel","Compact"],G7=["Gasoline","Diesel","Electric","Hybrid","Plug-in Hybrid","Hydrogen","Ethanol","Biodiesel","CNG","LPG"],F7=["Black","White","Silver","Gray","Red","Blue","Green","Yellow","Orange","Brown","Gold","Purple","Pink","Beige","Tan","Navy","Maroon","Teal","Burgundy","Charcoal"],c1="abcdefghijklmnopqrstuvwxyz".split(""),m1=new OZ,O7=m1}),J7={};a1(J7,{validateData:()=>B8,selectWeightedItem:()=>y8,isInWorkspace:()=>xX,installPackage:()=>aU,globalProviderRegistry:()=>Z7,getConfig:()=>HL,generateRealisticData:()=>PL,faker:()=>m1,detectPackageManager:()=>rU,defaultConfig:()=>YZ,default:()=>O7,config:()=>p1,applyRelationships:()=>c9,applyConstraints:()=>qL,WordModule:()=>w8,WeightedSelections:()=>_7,VehicleModule:()=>C8,ValidationRules:()=>Y7,SystemModule:()=>H8,StringModule:()=>$Z,SportModule:()=>M8,ScienceModule:()=>D8,Random:()=>ZZ,PhoneModule:()=>K8,PersonModule:()=>R8,NumberModule:()=>XZ,MusicModule:()=>I8,LoremModule:()=>e$,LocaleLoader:()=>Y9,InternetModule:()=>V8,ImageModule:()=>t$,HelpersModule:()=>a$,HackerModule:()=>W8,GitModule:()=>r$,FoodModule:()=>J8,FinanceModule:()=>o$,Faker:()=>OZ,DateModule:()=>s$,DatabaseModule:()=>l$,DataRelationships:()=>U7,DataProviderRegistry:()=>I5,CompanyModule:()=>O8,CommerceModule:()=>F8,ColorModule:()=>G8,BookModule:()=>E8,AnimalModule:()=>j8,AddressModule:()=>L8});var iL=e(()=>{nL()});function a9(){let X=new Date().toISOString();return I0(v.dialect)?X.slice(0,19).replace("T"," "):X}function q9(X,$){if(typeof X!=="string"||X.length===0)throw TypeError(`[bun-query-builder] ${$}: identifier must be a non-empty string, got ${typeof X}`);if(X.length>64)throw TypeError(`[bun-query-builder] ${$}: identifier '${X}' exceeds 64 chars`);if(!R5.test(X))throw TypeError(`[bun-query-builder] ${$}: identifier '${X}' contains characters outside [A-Za-z0-9_] \u2014 refusing to interpolate into SQL`)}function W7(X,$){if(typeof X!=="string"||X.length===0)throw TypeError(`[bun-query-builder] ${$}: identifier must be a non-empty string, got ${typeof X}`);let Z=X.split(".");if(Z.length>2||Z.some((Y)=>Y.length===0||Y.length>64||!R5.test(Y)))throw TypeError(`[bun-query-builder] ${$}: invalid ORDER BY column '${X}' \u2014 expected 'column' or 'table.column' of [A-Za-z0-9_] \u2014 refusing to interpolate into SQL`)}function U9(X){if(!G$)try{G$=(S$(),e7(C7)).getModel}catch{G$=()=>{return}}return G$(X)}function V6(X){let $=$8.get(X);if($!==void 0)return $;let Z=0,Y=X.replace(/\?/g,()=>`$${++Z}`);if($8.size>=eL)$8.clear();return $8.set(X,Y),Y}function I6(X){if(X==null)return 0;if(typeof X.affectedRows==="number")return X.affectedRows;if(typeof X.count==="number")return X.count;if(Array.isArray(X))return X.length;return 0}function R6(X){if(X==null||typeof X!=="object")return null;if("insertId"in X&&X.insertId!=null)return X.insertId;if("lastInsertRowid"in X&&X.lastInsertRowid!=null)return X.lastInsertRowid;return null}class n1{sqliteDb;dialect="sqlite";constructor(X){this.sqliteDb=X}all(X,$){return Promise.resolve(this.sqliteDb.query(X).all(...$))}get(X,$){return Promise.resolve(this.sqliteDb.query(X).get(...$)??void 0)}run(X,$){let Z=this.sqliteDb.run(X,$);return Promise.resolve({changes:Z.changes,lastInsertId:Z.lastInsertRowid})}insert(X,$){return this.run(X,$)}}class V7{dialect;constructor(X){this.dialect=X}conn(){return vX()}text(X){return this.dialect==="postgres"?V6(X):X}async all(X,$){let Z=await this.conn().unsafe(this.text(X),$);return Array.isArray(Z)?Z:[]}async get(X,$){let Z=await this.conn().unsafe(this.text(X),$);if(Array.isArray(Z))return Z[0]??void 0;return Z??void 0}async run(X,$){let Z=await this.conn().unsafe(this.text(X),$);return{changes:I6(Z),lastInsertId:R6(Z)}}async insert(X,$,Z){if(this.dialect==="postgres"){let _=await this.conn().unsafe(`${V6(X)} RETURNING ${Z}`,$),Q=Array.isArray(_)?_[0]:_;return{changes:1,lastInsertId:Q?Q[Z]??null:null}}let Y=await this.conn().unsafe(X,$),U=R6(Y);if(U==null){let _=await this.conn().unsafe("SELECT LAST_INSERT_ID() as id",[]);U=(Array.isArray(_)?_[0]:_)?.id??null}return{changes:I6(Y)||1,lastInsertId:U}}}function I7(X){if(X.database instanceof u1)r9=X.database;else r9=new u1(X.database||":memory:",{create:!0}),_5(r9);T9=null,Z8=null}function M0(){if(r9){if(!T9||Z8!==r9)T9=new n1(r9),Z8=r9,F1="sqlite",O1=null;return T9}let X=v.dialect,$=v.database?.database??null;if(T9&&Z8===null&&F1===X&&O1===$)return T9;if(Z8=null,F1=X,O1=$,X==="sqlite"){let Z=new u1($||":memory:",{create:!0});_5(Z),T9=new n1(Z)}else T9=new V7(X);return T9}function R7(){let X=M0();if(X.sqliteDb)return X.sqliteDb;throw Error(`[bun-query-builder] getDatabase() is only available for the sqlite dialect; the configured dialect is '${X.dialect}'. Use the async model API instead.`)}function gX(X){let $=X.traits;return Boolean($?.useSoftDeletes||$?.softDeletable)}function t9(X){let $=X.traits;return Boolean($?.useTimestamps||$?.timestampable)}function lL(X){let $=i1.get(X);if($)return $;let Z=new Set,Y=X.belongsToMany;if(Y){if(Array.isArray(Y)){for(let U of Y)if(typeof U==="string")Z.add(U.toLowerCase());else if(U&&typeof U==="object"&&U.model)Z.add(U.model.toLowerCase())}else if(typeof Y==="object")for(let U of Object.keys(Y))Z.add(U)}return i1.set(X,Z),Z}function K7(X){let $={};for(let[Z,Y]of Object.entries(X))$[C0(Z)]=Y;return $}function sL(X){for(let $ in X)if(C0($)!==$)return K7(X);return X}function oL(X,$){if(X[$])return X[$];let Z=C0($);if(X[Z])return X[Z];for(let Y of Object.keys(X))if(C0(Y)===Z)return X[Y];return}class e0{_attributes;_original;_definition;_hasSaved=!1;_relations={};constructor(X,$={}){this._definition=X,this._attributes=sL({...$}),this._original=null;let Z=lL(X);if(Z.size===0)return;let Y=this;return new Proxy(this,{get(U,_,Q){if(typeof _==="string"&&Z.has(_)&&!(_ in U))return()=>{let L=D7(X,_);if(!L||L.type!=="belongsToMany")throw Error(`[orm] relation '${_}' did not resolve to a belongsToMany on '${X.name}'`);let z=U9(L.relatedModelName),j=z?.getDefinition?.()||z?.definition;if(!j)throw Error(`[orm] related model '${L.relatedModelName}' is not registered`);return new M7(Y,X,L,j)};return Reflect.get(U,_,Q)}})}getOriginalAttributes(){if(this._original===null)this._original={...this._attributes};return this._original}get(X){let $=this._definition.get?.[X];if($)try{let Z=$(this._attributes);if(Z!==void 0)return Z}catch{}return this._attributes[C0(X)]}getAttribute(X){return this._attributes[C0(X)]}getAttributes(){return{...this._attributes}}set(X,$){if(this._original===null)this._original={...this._attributes};this._attributes[C0(X)]=$}only(X){let $={};for(let Z of X)$[Z]=this._attributes[C0(Z)];return $}except(X){let $=new Set(X.map((Y)=>C0(Y))),Z={};for(let Y of Object.keys(this._attributes))if(!$.has(Y))Z[Y]=this._attributes[Y];return Z}getRelation(X){return this._relations[X]}setRelation(X,$){this._relations[X]=$}getLoadedRelations(){return{...this._relations}}get attributes(){return{...this._attributes}}get id(){let X=this._definition.primaryKey||"id";return this._attributes[X]}isDirty(X){if(this._original===null)return!1;if(X){let $=C0(X);return this._attributes[$]!==this._original[$]}return Object.keys(this._attributes).some(($)=>this._attributes[$]!==this._original[$])}isClean(X){return!this.isDirty(X)}getOriginal(X){return this.getOriginalAttributes()[C0(X)]}getChanges(){if(this._original===null)return{};let X={};for(let $ of Object.keys(this._attributes))if(this._attributes[$]!==this._original[$])X[$]=this._attributes[$];return X}fill(X){let $=this._definition.attributes;for(let[Z,Y]of Object.entries(X)){let U=oL($,Z),_=!U&&C0(Z).endsWith("_id");if(U?.fillable&&!U?.guarded||_){if(this._original===null)this._original={...this._attributes};this._attributes[C0(Z)]=Y}}return this}forceFill(X){if(this._original===null)this._original={...this._attributes};return Object.assign(this._attributes,K7(X)),this}async save(){let X=M0(),$=this._definition.primaryKey||"id",Z=this._definition.hooks,Y=this._definition.set||{};for(let[U,_]of Object.entries(Y))if(this.isDirty(U))this._attributes[C0(U)]=_(this._attributes);if(this._attributes[$]){await Z?.beforeUpdate?.(this,this.getChanges());let U=this.getChanges(),_=Object.keys(U);if(_.length>0){let Q=_.map((z)=>`${z} = ?`).join(", "),L=[...Object.values(U),this._attributes[$]];if(t9(this._definition)){let z=a9();await X.run(`UPDATE ${this._definition.table} SET ${Q}, updated_at = ? WHERE ${$} = ?`,[...Object.values(U),z,this._attributes[$]])}else await X.run(`UPDATE ${this._definition.table} SET ${Q} WHERE ${$} = ?`,L)}await Z?.afterUpdate?.(this)}else{let U=this._definition.attributes,_={};for(let[j,E]of Object.entries(U)){if(E.guarded)continue;let W=C0(j);if(this._attributes[W]!==void 0)_[W]=this._attributes[W]}for(let j of Object.keys(this._attributes))if(j.endsWith("_id")&&j!==$&&!(j in _))_[j]=this._attributes[j];if(t9(this._definition)){let j=a9();_.created_at=j,_.updated_at=j}if(this._definition.traits?.useUuid&&!_.uuid)_.uuid=crypto.randomUUID();await Z?.beforeCreate?.(_);let Q=Object.keys(_),L=Q.map(()=>"?").join(", "),z=await X.insert(`INSERT INTO ${this._definition.table} (${Q.join(", ")}) VALUES (${L})`,Object.values(_),$);for(let[j,E]of Object.entries(_))this._attributes[j]=E;if(z.lastInsertId!=null)this._attributes[$]=z.lastInsertId;await Z?.afterCreate?.(this)}return this._original={...this._attributes},this._hasSaved=!0,this}async update(X){return this.fill(X),this.save()}async fresh(){let X=M0(),$=this._definition.primaryKey||"id",Z=this._attributes[$];if(Z==null)return null;let Y=await X.get(`SELECT * FROM ${this._definition.table} WHERE ${$} = ?`,[Z]);if(!Y)return null;return new e0(this._definition,Y)}async delete(){let X=M0(),$=this._definition.primaryKey||"id",Z=this._attributes[$],Y=this._definition.hooks;if(!Z)throw Error("Cannot delete a model without a primary key");if(await Y?.beforeDelete?.(this),gX(this._definition)){let U=a9();await X.run(`UPDATE ${this._definition.table} SET deleted_at = ? WHERE ${$} = ?`,[U,Z]),this._attributes[g9]=U}else await X.run(`DELETE FROM ${this._definition.table} WHERE ${$} = ?`,[Z]);return await Y?.afterDelete?.(this),!0}async restore(){if(!gX(this._definition))throw Error(`[orm] restore() requires soft deletes on '${this._definition.name}'`);let X=this._definition.primaryKey||"id",$=this._attributes[X];if(!$)throw Error("Cannot restore a model without a primary key");return await M0().run(`UPDATE ${this._definition.table} SET ${g9} = ? WHERE ${X} = ?`,[null,$]),this._attributes[g9]=null,this._original=null,this}trashed(){return this._attributes[g9]!=null}async refresh(){let X=M0(),$=this._definition.primaryKey||"id",Z=this._attributes[$];if(!Z)throw Error("Cannot refresh a model without a primary key");let Y=await X.get(`SELECT * FROM ${this._definition.table} WHERE ${$} = ?`,[Z]);if(!Y)return null;return this._attributes=Y,this._original=null,this}replicate(){let X=this._definition.primaryKey||"id",$={...this._attributes};return delete $[X],delete $.uuid,delete $.created_at,delete $.updated_at,new e0(this._definition,$)}toArray(){let X={...this._attributes};for(let[$,Z]of Object.entries(this._relations))if(Array.isArray(Z))X[$]=Z.map((Y)=>Y.toArray());else if(Z)X[$]=Z.toArray();else X[$]=null;return X}toJSON(){let X=new Set;for(let[Z,Y]of Object.entries(this._definition.attributes))if(Y.hidden)X.add(Z);let $={};for(let[Z,Y]of Object.entries(this._attributes))if(!X.has(Z))$[Z]=Y;for(let[Z,Y]of Object.entries(this._relations))if(Array.isArray(Y))$[Z]=Y.map((U)=>U.toJSON());else if(Y)$[Z]=Y.toJSON();else $[Z]=null;return $}}function V9(X){return C0(X)}function C0(X){let $=l1.get(X);if($!==void 0)return $;return $=X.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,""),l1.set(X,$),$}function l9(X){let $=s1.get(X);if($!==void 0)return $;let Z=C0(X);if(Z.endsWith("y")&&!Z.endsWith("ay")&&!Z.endsWith("ey")&&!Z.endsWith("oy")&&!Z.endsWith("uy"))$=Z.slice(0,-1)+"ies";else if(Z.endsWith("s")||Z.endsWith("x")||Z.endsWith("ch")||Z.endsWith("sh"))$=`${Z}es`;else $=`${Z}s`;return s1.set(X,$),$}function D7(X,$){let{name:Z,table:Y}=X,U=X.primaryKey||"id";function _(F){if(!F)return null;if(Array.isArray(F)){for(let R of F){let D=typeof R==="string"?R:R?.model||"";if(D&&D.toLowerCase()===$.toLowerCase())return D}return null}if(typeof F==="object"){for(let[R,D]of Object.entries(F))if(R===$||R.toLowerCase()===$.toLowerCase())return typeof D==="string"?D:D?.model||D?.target||R}return null}function Q(){let F=X.belongsTo;if(!F)return null;let R=$.toLowerCase(),D=(q)=>{if(typeof q==="string")return{model:q};if(q&&typeof q==="object"&&typeof q.model==="string")return{model:q.model,foreignKey:q.foreignKey};return null};if(Array.isArray(F)){for(let q of F){let C=D(q);if(C&&C.model.toLowerCase()===R)return C}return null}if(typeof F==="object"){for(let[q,C]of Object.entries(F))if(q===$||q.toLowerCase()===R)return D(C)}return null}function L(){let F=X.belongsToMany;if(!F)return null;if(Array.isArray(F)){for(let R of F)if(typeof R==="string"){if(R.toLowerCase()===$.toLowerCase())return{entry:R}}else if(R&&typeof R==="object"&&R.model){if(R.model.toLowerCase()===$.toLowerCase())return{entry:R}}return null}if(typeof F==="object"){for(let[R,D]of Object.entries(F))if(R===$||R.toLowerCase()===$.toLowerCase())return{entry:D}}return null}let z=_(X.hasMany);if(z){let R=U9(z)?.getTable?.()||l9(z),D=C0(Z)+"_id";return{type:"hasMany",relatedModelName:z,relatedTable:R,foreignKey:D,localKey:U}}let j=_(X.hasOne);if(j){let R=U9(j)?.getTable?.()||l9(j),D=C0(Z)+"_id";return{type:"hasOne",relatedModelName:j,relatedTable:R,foreignKey:D,localKey:U}}let E=Q();if(E){let F=E.model,R=U9(F),D=R?.getTable?.()||l9(F),q=R?.getDefinition?.()?.primaryKey||"id",C=E.foreignKey||`${C0(F)}_id`;return{type:"belongsTo",relatedModelName:F,relatedTable:D,foreignKey:C,localKey:q}}let W=L();if(W){let F=typeof W.entry==="object",R=F?W.entry.model:W.entry,q=U9(R)?.getTable?.()||l9(R),C=F?W.entry:null,S,P;if(C?.table)S=C.table;else if(C?.through){P=C.through;let h=U9(C.through);if(!h)throw Error(`[orm] belongsToMany relation '${$}' on '${Z}' references unknown through model '${C.through}'. Make sure '${C.through}' is registered.`);S=h.getTable?.()||h.getDefinition?.()?.table||l9(C.through)}else{let h=sX(Y),d=sX(q);S=[h,d].sort().join("_")}let H=C?.foreignKey||`${sX(Y)}_id`,N=C?.relatedKey||`${sX(q)}_id`,A=[];if(C?.pivot?.columns)for(let h of Object.keys(C.pivot.columns))A.push(h);if(P){let h=U9(P),d=h?.getDefinition?.()||h?.definition,b=d?.attributes??{},l=d?.primaryKey??"id";for(let s of Object.keys(b)){if(s===H||s===N||s===l)continue;if(!A.includes(s))A.push(s)}}return{type:"belongsToMany",relatedModelName:R,relatedTable:q,foreignKey:H,localKey:U,pivotTable:S,pivotFkParent:H,pivotFkRelated:N,pivotColumns:A,pivotModelName:P,pivotTimestamps:Boolean(C?.pivot?.timestamps)}}let G=(F,R)=>{if(!F||typeof F!=="object"||Array.isArray(F))return null;let D=F[$]??F[Object.keys(F).find((d)=>d.toLowerCase()===$.toLowerCase())??""];if(!D||typeof D!=="object")return null;let{through:q,target:C}=D;if(!q||!C)return null;let S=U9(q),P=S?.getDefinition?.()||S?.definition,H=S?.getTable?.()||P?.table||l9(q),N=P?.primaryKey||"id",h=U9(C)?.getTable?.()||l9(C);return{type:R,relatedModelName:C,relatedTable:h,foreignKey:`${C0(Z)}_id`,localKey:U,throughTable:H,throughForeignKey:`${C0(Z)}_id`,throughLocalKey:N,targetForeignKey:`${sX(H)}_id`}},J=G(X.hasManyThrough,"hasManyThrough");if(J)return J;let V=G(X.hasOneThrough,"hasOneThrough");if(V)return V;return null}function G1(X,$){let Z=new Set;for(let Y of X){let U=Y.get($);if(U!=null)Z.add(U)}return[...Z]}function sX(X){return zZ(v.relations?.singularizeStrategy)(X)}class M7{_parent;_parentDef;_resolved;_relatedDef;_wheres=[];_pivotWheres=[];_orderBy=[];_limit;_offset;constructor(X,$,Z,Y){this._parent=X,this._parentDef=$,this._resolved=Z,this._relatedDef=Y}get parentId(){let X=this._parentDef.primaryKey||"id";return this._parent.get(X)}get pivotTable(){return this._resolved.pivotTable}get fkParent(){return this._resolved.pivotFkParent}get fkRelated(){return this._resolved.pivotFkRelated}get relatedTable(){return this._resolved.relatedTable}get relatedPk(){return this._relatedDef.primaryKey||"id"}where(X,$,Z){if(Z===void 0)this._wheres.push({sql:`${this.relatedTable}.${X} = ?`,params:[$]});else this._wheres.push({sql:`${this.relatedTable}.${X} ${String($)} ?`,params:[Z]});return this}wherePivot(X,$,Z){if(Z===void 0)this._pivotWheres.push({sql:`${this.pivotTable}.${X} = ?`,params:[$]});else this._pivotWheres.push({sql:`${this.pivotTable}.${X} ${String($)} ?`,params:[Z]});return this}wherePivotIn(X,$){if(!$.length)return this;let Z=$.map(()=>"?").join(", ");return this._pivotWheres.push({sql:`${this.pivotTable}.${X} IN (${Z})`,params:[...$]}),this}wherePivotNotIn(X,$){if(!$.length)return this;let Z=$.map(()=>"?").join(", ");return this._pivotWheres.push({sql:`${this.pivotTable}.${X} NOT IN (${Z})`,params:[...$]}),this}wherePivotNull(X){return this._pivotWheres.push({sql:`${this.pivotTable}.${X} IS NULL`,params:[]}),this}wherePivotNotNull(X){return this._pivotWheres.push({sql:`${this.pivotTable}.${X} IS NOT NULL`,params:[]}),this}orderBy(X,$="asc"){if(W7(X,"orderBy(column)"),$!=="asc"&&$!=="desc")throw TypeError(`[bun-query-builder] orderBy(direction): expected 'asc' or 'desc', got '${$}'`);return this._orderBy.push(`${X} ${$.toUpperCase()}`),this}limit(X){if(!Number.isFinite(X)||X<0||!Number.isInteger(X))throw TypeError(`[bun-query-builder] limit(n): expected non-negative integer, got ${X}`);return this._limit=X,this}offset(X){if(!Number.isFinite(X)||X<0||!Number.isInteger(X))throw TypeError(`[bun-query-builder] offset(n): expected non-negative integer, got ${X}`);return this._offset=X,this}relatedSelectColumns(){let X=new Set([this.relatedPk,...Object.keys(this._relatedDef.attributes??{})]),$=this._relatedDef.traits;if($?.useTimestamps||$?.timestampable)X.add("created_at"),X.add("updated_at");if($?.useSoftDeletes||$?.softDeletable)X.add("deleted_at");if($?.useUuid)X.add("uuid");return[...X]}buildSelect(){let X=[],Z=`SELECT ${this.relatedSelectColumns().map((Y)=>`${this.relatedTable}.${Y} AS ${J1}${Y}`).join(", ")}, ${this.pivotTable}.* FROM ${this.relatedTable}`;Z+=` INNER JOIN ${this.pivotTable} ON ${this.pivotTable}.${this.fkRelated} = ${this.relatedTable}.${this.relatedPk}`,Z+=` WHERE ${this.pivotTable}.${this.fkParent} = ?`,X.push(this.parentId);for(let Y of this._pivotWheres)Z+=` AND ${Y.sql}`,X.push(...Y.params);for(let Y of this._wheres)Z+=` AND ${Y.sql}`,X.push(...Y.params);if(this._orderBy.length>0)Z+=` ORDER BY ${this._orderBy.join(", ")}`;if(this._limit!==void 0)Z+=` LIMIT ${this._limit}`;if(this._offset!==void 0)Z+=` OFFSET ${this._offset}`;return{sql:Z,params:X}}hydrateRows(X){let $=this.fkParent,Z=this.fkRelated;return X.map((Y)=>{let U={},_={};for(let[L,z]of Object.entries(Y))if(L.startsWith(J1))U[L.slice(J1.length)]=z;else if(L!==$&&L!==Z)_[L]=z;let Q=new e0(this._relatedDef,U);return Q.pivot=_,Q})}async get(){let X=M0(),{sql:$,params:Z}=this.buildSelect(),Y=await X.all($,Z);return this.hydrateRows(Y)}async first(){return this._limit=1,(await this.get())[0]}async count(){let X=M0(),$=`SELECT COUNT(*) as count FROM ${this.pivotTable} WHERE ${this.fkParent} = ?`,Z=[this.parentId];for(let U of this._pivotWheres)$+=` AND ${U.sql}`,Z.push(...U.params);let Y=await X.get($,Z);return Number(Y?.count??0)}async exists(){return await this.count()>0}now(){return a9()}async attach(X,$={}){let Z=M0(),Y=Array.isArray(X)?X:[X];if(Y.length===0)return 0;let U=this._resolved.pivotTimestamps?this.now():null,_=0;for(let Q of Y){let L={[this.fkParent]:this.parentId,[this.fkRelated]:Q,...$};if(U){if(L.created_at===void 0)L.created_at=U;if(L.updated_at===void 0)L.updated_at=U}let z=Object.keys(L),j=z.map(()=>"?").join(", "),E=`INSERT INTO ${this.pivotTable} (${z.join(", ")}) VALUES (${j})`,W=z.map((G)=>L[G]);await Z.run(E,W),_++}return _}async detach(X){let $=M0(),Z=`DELETE FROM ${this.pivotTable} WHERE ${this.fkParent} = ?`,Y=[this.parentId];if(X!==void 0&&X!==null){let U=Array.isArray(X)?X:[X];if(U.length===0)return 0;let _=U.map(()=>"?").join(", ");Z+=` AND ${this.fkRelated} IN (${_})`,Y.push(...U)}return(await $.run(Z,Y)).changes}async updateExistingPivot(X,$){let Z=M0(),Y={...$};if(this._resolved.pivotTimestamps&&Y.updated_at===void 0)Y.updated_at=this.now();let U=Object.keys(Y);if(U.length===0)return 0;let _=U.map((z)=>`${z} = ?`).join(", "),Q=`UPDATE ${this.pivotTable} SET ${_} WHERE ${this.fkParent} = ? AND ${this.fkRelated} = ?`,L=[...U.map((z)=>Y[z]),this.parentId,X];return(await Z.run(Q,L)).changes}async sync(X){let $=M0(),Z=new Map;for(let j of X)if(j!=null&&typeof j==="object"&&"id"in j){let{id:E,...W}=j;Z.set(E,W)}else Z.set(j,{});let Y=await $.all(`SELECT * FROM ${this.pivotTable} WHERE ${this.fkParent} = ?`,[this.parentId]),U=new Set(Y.map((j)=>j[this.fkRelated])),_=[],Q=[],L=[],z=[...U].filter((j)=>!Z.has(j));if(z.length>0)await this.detach(z),Q.push(...z);for(let[j,E]of Z)if(!U.has(j))await this.attach(j,E),_.push(j);else if(Object.keys(E).length>0)await this.updateExistingPivot(j,E),L.push(j);return{attached:_,detached:Q,updated:L}}async toggle(X){let $=M0(),Z=Array.isArray(X)?X:[X];if(Z.length===0)return{attached:[],detached:[]};let Y=Z.map(()=>"?").join(", "),U=await $.all(`SELECT ${this.fkRelated} FROM ${this.pivotTable} WHERE ${this.fkParent} = ? AND ${this.fkRelated} IN (${Y})`,[this.parentId,...Z]),_=new Set(U.map((z)=>z[this.fkRelated])),Q=Z.filter((z)=>!_.has(z)),L=Z.filter((z)=>_.has(z));if(Q.length>0)await this.attach(Q);if(L.length>0)await this.detach(L);return{attached:Q,detached:L}}}class U0{_definition;_wheres=[];_orderBy=[];_limit;_offset;_select=["*"];_withRelations=[];_trashed="exclude";constructor(X){this._definition=X}withTrashed(){return this._trashed="include",this}onlyTrashed(){return this._trashed="only",this}where(X,$,Z){if(Z===void 0)this._wheres.push({column:X,operator:"=",value:$,boolean:"and"});else this._wheres.push({column:X,operator:$,value:Z,boolean:"and"});return this}orWhere(X,$,Z){if(Z===void 0)this._wheres.push({column:X,operator:"=",value:$,boolean:"or"});else this._wheres.push({column:X,operator:$,value:Z,boolean:"or"});return this}whereIn(X,$){return this._wheres.push({column:X,operator:"in",value:$,boolean:"and"}),this}orWhereIn(X,$){return this._wheres.push({column:X,operator:"in",value:$,boolean:"or"}),this}whereNotIn(X,$){return this._wheres.push({column:X,operator:"not in",value:$,boolean:"and"}),this}orWhereNotIn(X,$){return this._wheres.push({column:X,operator:"not in",value:$,boolean:"or"}),this}whereNull(X){return q9(X,"whereNull(column)"),this._wheres.push({column:X,operator:"=",value:null,boolean:"and"}),this}orWhereNull(X){return q9(X,"orWhereNull(column)"),this._wheres.push({column:X,operator:"=",value:null,boolean:"or"}),this}whereNotNull(X){return q9(X,"whereNotNull(column)"),this._wheres.push({column:X,operator:"!=",value:null,boolean:"and"}),this}orWhereNotNull(X){return q9(X,"orWhereNotNull(column)"),this._wheres.push({column:X,operator:"!=",value:null,boolean:"or"}),this}whereLike(X,$){return this._wheres.push({column:X,operator:"like",value:$,boolean:"and"}),this}orWhereLike(X,$){return this._wheres.push({column:X,operator:"like",value:$,boolean:"or"}),this}whereNotLike(X,$){return this._wheres.push({column:X,operator:"not like",value:$,boolean:"and"}),this}orWhereNotLike(X,$){return this._wheres.push({column:X,operator:"not like",value:$,boolean:"or"}),this}whereRaw(X,...$){return this._wheres.push({raw:X,rawParams:$,boolean:"and"}),this}orWhereRaw(X,...$){return this._wheres.push({raw:X,rawParams:$,boolean:"or"}),this}whereGroup(X){return this._addGroup("and",X)}orWhereGroup(X){return this._addGroup("or",X)}_addGroup(X,$){let Z=new U0(this._definition);if($(Z),Z._wheres.length===0)return this;let Y=[],U=Z.buildWhereClauses(Y);if(!U)return this;return this._wheres.push({raw:`(${U})`,rawParams:Y,boolean:X}),this}whereBetween(X,$){return q9(X,"whereBetween(column)"),this._wheres.push({column:X,operator:">=",value:$[0],boolean:"and"}),this._wheres.push({column:X,operator:"<=",value:$[1],boolean:"and"}),this}whereNotBetween(X,$){q9(X,"whereNotBetween(column)");let Z=V9(X);return this._wheres.push({raw:`(${Z} < ? OR ${Z} > ?)`,rawParams:[$[0],$[1]],boolean:"and"}),this}when(X,$){if(X)return $(this);return this}orderBy(X,$="asc"){if(W7(X,"orderBy(column)"),$!=="asc"&&$!=="desc")throw TypeError(`[bun-query-builder] orderBy(direction): expected 'asc' or 'desc', got '${$}'`);return this._orderBy.push({column:X,direction:$}),this}orderByDesc(X){return this.orderBy(X,"desc")}orderByAsc(X){return this.orderBy(X,"asc")}limit(X){return this._limit=X,this}take(X){return this.limit(X)}offset(X){return this._offset=X,this}skip(X){return this.offset(X)}select(...X){return this._select=X,this}with(...X){for(let $ of X)if(!this._withRelations.includes($))this._withRelations.push($);return this}getWithRelations(){return this._withRelations}buildWhereClauses(X){let $=[];for(let Z=0;Z<this._wheres.length;Z++){let Y=this._wheres[Z],U;if(Y.raw){if(U=Y.raw,Y.rawParams&&Y.rawParams.length>0)X.push(...Y.rawParams)}else if(Y.value===null){let _=V9(Y.column);U=Y.operator==="="?`${_} IS NULL`:`${_} IS NOT NULL`}else if(Y.operator==="in"||Y.operator==="not in"){let _=Y.value;U=`${V9(Y.column)} ${Y.operator.toUpperCase()} (${_.map(()=>"?").join(", ")})`,X.push(..._)}else U=`${V9(Y.column)} ${Y.operator} ?`,X.push(Y.value);$.push(Z===0?U:`${Y.boolean.toUpperCase()} ${U}`)}return $.join(" ")}softDeleteClause(){if(this._trashed==="include"||!gX(this._definition))return"";return this._trashed==="only"?`${g9} IS NOT NULL`:`${g9} IS NULL`}composeWhere(X){let $=this._wheres.length>0?this.buildWhereClauses(X):"",Z=this.softDeleteClause();if($&&Z)return`(${$}) AND ${Z}`;return $||Z}buildQuery(){let X=[],Z=`SELECT ${this._select.map((U)=>U==="*"?U:V9(U)).join(", ")} FROM ${this._definition.table}`,Y=this.composeWhere(X);if(Y)Z+=` WHERE ${Y}`;if(this._orderBy.length>0)Z+=` ORDER BY ${this._orderBy.map((U)=>`${V9(U.column)} ${U.direction.toUpperCase()}`).join(", ")}`;if(this._limit!==void 0)Z+=` LIMIT ${this._limit}`;if(this._offset!==void 0)Z+=` OFFSET ${this._offset}`;return{sql:Z,params:X}}toSql(){return this.buildQuery()}async eagerLoadRelations(X){if(X.length===0||this._withRelations.length===0)return;await Promise.all(this._withRelations.map(($)=>this.eagerLoadRelation($,X)))}async eagerLoadRelation(X,$){let Z=M0(),Y=this._definition.primaryKey||"id",U=`${this._definition.name}:${X}`,_=Y8.get(U);if(_===void 0){if(_=D7(this._definition,X),Y8.size>=Xj)Y8.clear();Y8.set(U,_)}if(!_)return;if(_.type==="hasMany"||_.type==="hasOne"){let Q=G1($,Y);if(Q.length===0)return;let L=Q.map(()=>"?").join(", "),z=await Z.all(`SELECT * FROM ${_.relatedTable} WHERE ${_.foreignKey} IN (${L})`,Q),j=U9(_.relatedModelName),E=j?.getDefinition?.()||j?.definition||this._definition;if(_.type==="hasMany"){let W=new Map;for(let G of z){let J=G[_.foreignKey];if(!W.has(J))W.set(J,[]);W.get(J).push(G)}for(let G of $){let J=W.get(G.get(Y))||[];G.setRelation(X,J.map((V)=>new e0(E,V)))}}else{let W=new Map;for(let G of z){let J=G[_.foreignKey];if(!W.has(J))W.set(J,G)}for(let G of $){let J=W.get(G.get(Y));G.setRelation(X,J?new e0(E,J):null)}}}if(_.type==="belongsTo"){let Q=new Set;for(let J of $){let V=J._attributes[_.foreignKey];if(V!=null)Q.add(V)}let L=[...Q];if(L.length===0)return;let z=L.map(()=>"?").join(", "),j=await Z.all(`SELECT * FROM ${_.relatedTable} WHERE ${_.localKey} IN (${z})`,L),E=U9(_.relatedModelName),W=E?.getDefinition?.()||E?.definition||this._definition,G=new Map;for(let J of j)G.set(J[_.localKey],J);for(let J of $){let V=J._attributes[_.foreignKey],F=G.get(V);J.setRelation(X,F?new e0(W,F):null)}}if(_.type==="belongsToMany"){let Q=G1($,Y);if(Q.length===0)return;if(!_.pivotTable||!_.pivotFkParent||!_.pivotFkRelated)return;let L=Q.map(()=>"?").join(", "),z=await Z.all(`SELECT * FROM ${_.pivotTable} WHERE ${_.pivotFkParent} IN (${L})`,Q);if(z.length===0){for(let q of $)q.setRelation(X,[]);return}let j=new Set;for(let q of z){let C=q[_.pivotFkRelated];if(C!=null)j.add(C)}let E=[...j],W=U9(_.relatedModelName),G=W?.getDefinition?.()||W?.definition||this._definition,J=G?.primaryKey||"id",V=[];if(E.length>0){let q=E.map(()=>"?").join(", ");V=await Z.all(`SELECT * FROM ${_.relatedTable} WHERE ${J} IN (${q})`,E)}let F=new Map;for(let q of V)F.set(q[J],q);let R=new Map;for(let q of z){let C=q[_.pivotFkParent];if(!R.has(C))R.set(C,[]);R.get(C).push(q)}let D=new Set([_.pivotFkParent,_.pivotFkRelated]);for(let q of $){let C=q.get(Y),P=(R.get(C)||[]).map((H)=>{let N=F.get(H[_.pivotFkRelated]);if(!N)return null;let A=new e0(G,N),h={};for(let[d,b]of Object.entries(H))if(!D.has(d))h[d]=b;return A.pivot=h,A}).filter((H)=>H!==null);q.setRelation(X,P)}}if(_.type==="hasManyThrough"||_.type==="hasOneThrough"){let Q=G1($,Y);if(Q.length===0)return;let L=_.throughLocalKey||"id",z=Q.map(()=>"?").join(", "),j=await Z.all(`SELECT ${L}, ${_.throughForeignKey} FROM ${_.throughTable} WHERE ${_.throughForeignKey} IN (${z})`,Q);if(j.length===0){for(let D of $)D.setRelation(X,_.type==="hasManyThrough"?[]:null);return}let E=new Map;for(let D of j)E.set(D[L],D[_.throughForeignKey]);let W=[...new Set(j.map((D)=>D[L]))],G=W.map(()=>"?").join(", "),J=await Z.all(`SELECT * FROM ${_.relatedTable} WHERE ${_.targetForeignKey} IN (${G})`,W),V=U9(_.relatedModelName),F=V?.getDefinition?.()||V?.definition||this._definition,R=new Map;for(let D of J){let q=E.get(D[_.targetForeignKey]);if(q==null)continue;if(!R.has(q))R.set(q,[]);R.get(q).push(new e0(F,D))}for(let D of $){let q=R.get(D.get(Y))||[];D.setRelation(X,_.type==="hasManyThrough"?q:q[0]??null)}}}async get(){let X=M0(),{sql:$,params:Z}=this.buildQuery(),U=(await X.all($,Z)).map((_)=>new e0(this._definition,_));if(this._withRelations.length>0)await this.eagerLoadRelations(U);return U}async first(){return this._limit=1,(await this.get())[0]}async firstOrFail(){let X=await this.first();if(!X)throw Error(`No ${this._definition.name} found`);return X}async last(){let X=this._definition.primaryKey||"id";return this._orderBy=[{column:X,direction:"desc"}],this._limit=1,(await this.get())[0]}async count(){let X=M0(),$=[],Z=`SELECT COUNT(*) as count FROM ${this._definition.table}`,Y=this.composeWhere($);if(Y)Z+=` WHERE ${Y}`;let U=await X.get(Z,$);return Number(U?.count??0)}async exists(){return await this.count()>0}async doesntExist(){return await this.count()===0}async sole(){this._limit=2;let X=await this.get();if(X.length===0)throw Error(`No ${this._definition.name} found`);if(X.length>1)throw Error(`Expected one ${this._definition.name}, found multiple`);return X[0]}async increment(X,$=1){q9(X,"increment(column)");let Z=M0(),Y=[$],U=V9(X),_=`UPDATE ${this._definition.table} SET ${U} = ${U} + ?`;if(t9(this._definition))_+=", updated_at = ?",Y.push(a9());if(this._wheres.length>0){let Q=this.buildWhereClauses(Y);_+=` WHERE ${Q}`}return(await Z.run(_,Y)).changes}decrement(X,$=1){return this.increment(X,-$)}async chunk(X,$){let Z=0;while(!0){let Y=new U0(this._definition);Y._wheres=[...this._wheres],Y._orderBy=[...this._orderBy],Y._select=[...this._select],Y._withRelations=[...this._withRelations],Y._trashed=this._trashed,Y._limit=X,Y._offset=Z*X;let U=await Y.get();if(U.length===0)break;if(await $(U)===!1)break;if(U.length<X)break;Z++}}async paginate(X=1,$=15){let Z=await this.count(),Y=Math.ceil(Z/$);this._limit=$,this._offset=(X-1)*$;let U=await this.get();return{data:U,total:Z,page:X,perPage:$,lastPage:Y,hasMorePages:X<Y,isEmpty:U.length===0,from:U.length>0?(X-1)*$+1:null,to:U.length>0?(X-1)*$+U.length:null}}async pluck(X){q9(X,"pluck(column)");let $=M0(),Z=[],Y=V9(X),U=`SELECT ${Y} FROM ${this._definition.table}`,_=this.composeWhere(Z);if(_)U+=` WHERE ${_}`;if(this._orderBy.length>0)U+=` ORDER BY ${this._orderBy.map((L)=>`${V9(L.column)} ${L.direction.toUpperCase()}`).join(", ")}`;if(this._limit!==void 0)U+=` LIMIT ${this._limit}`;if(this._offset!==void 0)U+=` OFFSET ${this._offset}`;return(await $.all(U,Z)).map((L)=>L[Y])}async aggregate(X,$){q9($,`${X}(column)`);let Z=M0(),Y=[],U=`SELECT ${X}(${V9($)}) as v FROM ${this._definition.table}`,_=this.composeWhere(Y);if(_)U+=` WHERE ${_}`;let L=(await Z.get(U,Y))?.v;if(L==null)return null;if(typeof L==="string"){let z=Number(L);return L.trim()!==""&&!Number.isNaN(z)?z:L}return L}max(X){return this.aggregate("MAX",X)}min(X){return this.aggregate("MIN",X)}async avg(X){return Number(await this.aggregate("AVG",X)??0)||0}async sum(X){return Number(await this.aggregate("SUM",X)??0)||0}async delete(){let X=M0(),$=[],Z=`DELETE FROM ${this._definition.table}`;if(this._wheres.length>0)Z+=` WHERE ${this.buildWhereClauses($)}`;return(await X.run(Z,$)).changes}async update(X){let $=M0(),Z=Object.entries(X),Y=Z.map(([Q])=>`${V9(Q)} = ?`).join(", "),U=Z.map(([,Q])=>Q);if(t9(this._definition))U.push(a9());let _=`UPDATE ${this._definition.table} SET ${Y}${t9(this._definition)?", updated_at = ?":""}`;if(this._wheres.length>0)_+=` WHERE ${this.buildWhereClauses(U)}`;return(await $.run(_,U)).changes}}function rL(X){let $={query:()=>new U0(X),where(Z,Y,U){return new U0(X).where(Z,Y,U)},orWhere(Z,Y,U){return new U0(X).orWhere(Z,Y,U)},whereIn(Z,Y){return new U0(X).whereIn(Z,Y)},whereNotIn(Z,Y){return new U0(X).whereNotIn(Z,Y)},whereNull(Z){return new U0(X).whereNull(Z)},whereNotNull(Z){return new U0(X).whereNotNull(Z)},whereLike(Z,Y){return new U0(X).whereLike(Z,Y)},orderBy(Z,Y="asc"){return new U0(X).orderBy(Z,Y)},orderByDesc(Z){return new U0(X).orderByDesc(Z)},select(...Z){return new U0(X).select(...Z)},with(...Z){return new U0(X).with(...Z)},limit:(Z)=>new U0(X).limit(Z),take:(Z)=>new U0(X).take(Z),skip:(Z)=>new U0(X).skip(Z),withTrashed:()=>new U0(X).withTrashed(),onlyTrashed:()=>new U0(X).onlyTrashed(),async find(Z){let Y=M0(),U=X.primaryKey||"id",_=gX(X)?` AND ${g9} IS NULL`:"",Q=await Y.get(`SELECT * FROM ${X.table} WHERE ${U} = ?${_}`,[Z]);return Q?new e0(X,Q):void 0},async findOrFail(Z){let Y=await $.find(Z);if(!Y)throw Error(`${X.name} with id ${Z} not found`);return Y},async findMany(Z){let Y=M0(),U=X.primaryKey||"id",_=gX(X)?` AND ${g9} IS NULL`:"";return(await Y.all(`SELECT * FROM ${X.table} WHERE ${U} IN (${Z.map(()=>"?").join(", ")})${_}`,Z)).map((L)=>new e0(X,L))},all:()=>new U0(X).get(),first:()=>new U0(X).first(),firstOrFail:()=>new U0(X).firstOrFail(),last:()=>new U0(X).last(),count:()=>new U0(X).count(),exists:()=>new U0(X).exists(),doesntExist:()=>new U0(X).doesntExist(),paginate:(Z,Y)=>new U0(X).paginate(Z,Y),whereBetween(Z,Y){return new U0(X).whereBetween(Z,Y)},whereNotBetween(Z,Y){return new U0(X).whereNotBetween(Z,Y)},async create(Z){let Y=new e0(X,Z);return await Y.save(),Y},async createMany(Z){let Y=[];for(let U of Z)Y.push(await this.create(U));return Y},async updateOrCreate(Z,Y){let U=new U0(X);for(let[Q,L]of Object.entries(Z))U=U.where(Q,L);let _=await U.first();if(_)return await _.update(Y),_;return this.create({...Z,...Y})},async firstOrCreate(Z,Y){let U=new U0(X);for(let[Q,L]of Object.entries(Z))U=U.where(Q,L);return await U.first()||this.create({...Z,...Y})},async destroy(Z){let Y=M0(),U=X.primaryKey||"id";return(await Y.run(`DELETE FROM ${X.table} WHERE ${U} = ?`,[Z])).changes>0},remove(Z){return this.destroy(Z)},async truncate(){await M0().run(`DELETE FROM ${X.table}`,[])},getDefinition:()=>X,getTable:()=>X.table,make(Z={}){return new e0(X,Z)},latest:(Z="created_at")=>new U0(X).orderByDesc(Z),oldest:(Z="created_at")=>new U0(X).orderBy(Z,"asc"),max:(Z)=>new U0(X).max(Z),min:(Z)=>new U0(X).min(Z),avg:(Z)=>new U0(X).avg(Z),sum:(Z)=>new U0(X).sum(Z),pluck(Z){return new U0(X).pluck(Z)}};return new Proxy($,{get(Z,Y){if(typeof Y==="string"&&Y.startsWith("where")&&Y.length>5){let U=Y.slice(5),_=U.charAt(0).toLowerCase()+U.slice(1);if(_ in X.attributes||_==="id"||_===X.primaryKey)return(Q)=>new U0(X).where(_,Q)}return Reflect.get(Z,Y)}})}function aL(X){return rL(X)}async function KO(X){let $=M0(),Z=C0(X.primaryKey||"id"),Y=[],U=new Set([Z]);if(Y.push(X.autoIncrement!==!1?`${Z} INTEGER PRIMARY KEY AUTOINCREMENT`:`${Z} INTEGER PRIMARY KEY`),X.traits?.useUuid)Y.push("uuid TEXT UNIQUE"),U.add("uuid");for(let[_,Q]of Object.entries(X.attributes)){let L=C0(_);if(U.has(L))continue;U.add(L);let z="TEXT";if(Q.type==="number")z="INTEGER";else if(Q.type==="boolean")z="INTEGER";if(L.endsWith("_id"))z="INTEGER";let j=`${L} ${z}`;if(Q.unique)j+=" UNIQUE";if(typeof Q.foreignKey==="object"&&Q.foreignKey!==null){let E=Q.foreignKey;if(j+=` REFERENCES ${E.table}(${E.column??"id"})`,E.onDelete)j+=` ON DELETE ${E.onDelete.toUpperCase()}`;if(E.onUpdate)j+=` ON UPDATE ${E.onUpdate.toUpperCase()}`}Y.push(j)}for(let _ of pU(X.belongsTo)){let Q=_.foreignKey??`${C0(_.model)}_id`;if(U.has(Q))continue;U.add(Q),Y.push(`${Q} INTEGER`)}if(t9(X))for(let _ of["created_at","updated_at"]){if(U.has(_))continue;U.add(_),Y.push(`${_} TEXT`)}if(gX(X)&&!U.has("deleted_at"))U.add("deleted_at"),Y.push("deleted_at TEXT");await $.run(`CREATE TABLE IF NOT EXISTS ${X.table} (${Y.join(", ")})`,[])}function tL(X){return new Proxy(X,{get($,Z){if(Z==="location")return $.address;if(Z==="datatype"){let{random:Y,number:U,string:_}=$;return{boolean:()=>Y?.boolean?.(),number:(Q)=>U?.int?.(Q),float:(Q)=>U?.float?.(Q),uuid:()=>crypto.randomUUID(),string:(Q)=>_?.alphanumeric?.(Q??10)}}return $[Z]}})}async function DO(X,$,Z){let Y=M0(),U=X.traits?.useSeeder,_=$??(typeof U==="object"&&U?U.count:10);if(!Z)try{let Q=await Promise.resolve().then(()=>(iL(),J7));Z=tL(Q.faker)}catch{console.warn("@stacksjs/ts-faker not found. Install it for seeding support.");return}for(let Q=0;Q<_;Q++){let L={};for(let[j,E]of Object.entries(X.attributes))if(E.factory)L[C0(j)]=E.factory(Z);if(t9(X)){let j=a9();L.created_at=j,L.updated_at=j}if(X.traits?.useUuid)L.uuid=crypto.randomUUID();let z=Object.keys(L);await Y.run(`INSERT INTO ${X.table} (${z.join(", ")}) VALUES (${z.map(()=>"?").join(", ")})`,Object.values(L))}}var R5,G$=null,$8,eL=500,r9=null,T9=null,Z8=null,F1=null,O1=null,g9="deleted_at",J1="__btm_rel__",i1,l1,s1,Y8,Xj=1000,H7=e(()=>{d0(),ZX(),Q5(),R5=/^[A-Z_][A-Z0-9_]*$/i,$8=new Map,i1=new WeakMap,l1=new Map,s1=new Map,Y8=new Map}),C7={};a1(C7,{registerModel:()=>JZ,registerBrowserModels:()=>zj,hasModel:()=>Uj,getModelRegistry:()=>Yj,getModel:()=>$j,getAllModels:()=>Zj,defineModel:()=>K5,clearModelRegistry:()=>_j});function $j(X){return _X.get(X)}function Zj(){return[..._X.values()]}function Yj(){return Object.fromEntries(_X)}function Uj(X){return _X.has(X)}function _j(){_X.clear()}function JZ(X,$){return _X.set(X,$),$}function Qj(){return typeof window<"u"&&typeof document<"u"}function K5(X){let $;if(Qj())$=Y2(X);else{let Z=aL(X);$=Object.assign(Z,{definition:X,getDefinition:()=>X,getTable:()=>X.table,getName:()=>X.name})}return JZ(X.name,$),$}function zj(X){if(typeof window>"u")return;window.StacksBrowser={...window.StacksBrowser,...X}}var _X,S$=e(()=>{N6(),H7(),_X=new Map});class pX{driver;client;tableName;indexName;entityType;keyConditions=[];filterConditions=[];projectionAttrs=[];limitValue;scanForward=!0;consistentReadValue=!1;startKey;constructor(X){this.driver=dX(X.config),this.client=X.client,this.tableName=X.config.tableName??""}table(X){return this.tableName=X,this}index(X){return this.indexName=X,this}entity(X){return this.entityType=X,this}whereKey(X,$,Z){return this.keyConditions.push({attribute:X,operator:$,value:Z}),this}wherePartitionKey(X,$){return this.whereKey(X,"=",$)}whereSortKey(X,$){return this.whereKey(X,"=",$)}whereSortKeyBeginsWith(X,$){return this.keyConditions.push({attribute:X,operator:"begins_with",value:$}),this}whereSortKeyBetween(X,$,Z){return this.keyConditions.push({attribute:X,operator:"BETWEEN",values:[$,Z]}),this}where(X,$,Z){return this.filterConditions.push({attribute:X,operator:$,value:Z}),this}whereEquals(X,$){return this.where(X,"=",$)}whereLessThan(X,$){return this.where(X,"<",$)}whereLessThanOrEqual(X,$){return this.where(X,"<=",$)}whereGreaterThan(X,$){return this.where(X,">",$)}whereGreaterThanOrEqual(X,$){return this.where(X,">=",$)}whereBetween(X,$,Z){return this.filterConditions.push({attribute:X,operator:"BETWEEN",values:[$,Z]}),this}whereBeginsWith(X,$){return this.filterConditions.push({attribute:X,operator:"begins_with",value:$}),this}whereContains(X,$){return this.where(X,"contains",$)}whereExists(X){return this.where(X,"attribute_exists")}whereNotExists(X){return this.where(X,"attribute_not_exists")}whereIn(X,$){return this.filterConditions.push({attribute:X,operator:"IN",values:$}),this}select(...X){return this.projectionAttrs.push(...X),this}limit(X){return this.limitValue=X,this}ascending(){return this.scanForward=!0,this}descending(){return this.scanForward=!1,this}consistentRead(X=!0){return this.consistentReadValue=X,this}startFrom(X){return this.startKey=X,this}buildQueryParams(){return this.driver.buildQueryParams({tableName:this.tableName,indexName:this.indexName,keyConditions:this.keyConditions,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,scanIndexForward:this.scanForward,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}buildScanParams(){return this.driver.buildScanParams({tableName:this.tableName,indexName:this.indexName,filterConditions:this.filterConditions.length>0?this.filterConditions:void 0,projectionAttributes:this.projectionAttrs.length>0?this.projectionAttrs:void 0,limit:this.limitValue,exclusiveStartKey:this.startKey,consistentRead:this.consistentReadValue})}toQueryRequest(){let X=this.buildQueryParams(),$={TableName:X.tableName,ExpressionAttributeNames:{},ExpressionAttributeValues:{}};if(X.indexName)$.IndexName=X.indexName;let Z=0;if(X.keyConditions.length>0){let Y=[];for(let U of X.keyConditions){let _=`#key${Z}`;if($.ExpressionAttributeNames[_]=U.attribute,U.operator==="begins_with"){let Q=`:keyval${Z}`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.value}).v,Y.push(`begins_with(${_}, ${Q})`)}else if(U.operator==="BETWEEN"){let Q=`:keyval${Z}a`,L=`:keyval${Z}b`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.values?.[0]}).v,$.ExpressionAttributeValues[L]=this.driver.marshall({v:U.values?.[1]}).v,Y.push(`${_} BETWEEN ${Q} AND ${L}`)}else{let Q=`:keyval${Z}`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.value}).v,Y.push(`${_} ${U.operator} ${Q}`)}Z++}$.KeyConditionExpression=Y.join(" AND ")}if(X.filterConditions&&X.filterConditions.length>0){let Y=[];for(let U of X.filterConditions){let _=`#flt${Z}`;if($.ExpressionAttributeNames[_]=U.attribute,U.operator==="attribute_exists")Y.push(`attribute_exists(${_})`);else if(U.operator==="attribute_not_exists")Y.push(`attribute_not_exists(${_})`);else if(U.operator==="begins_with"||U.operator==="contains"){let Q=`:fltval${Z}`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.value}).v,Y.push(`${U.operator}(${_}, ${Q})`)}else if(U.operator==="BETWEEN"){let Q=`:fltval${Z}a`,L=`:fltval${Z}b`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.values?.[0]}).v,$.ExpressionAttributeValues[L]=this.driver.marshall({v:U.values?.[1]}).v,Y.push(`${_} BETWEEN ${Q} AND ${L}`)}else if(U.operator==="IN"){let Q=(U.values??[]).map((L,z)=>`:fltval${Z}_${z}`);U.values?.forEach((L,z)=>{$.ExpressionAttributeValues[`:fltval${Z}_${z}`]=this.driver.marshall({v:L}).v}),Y.push(`${_} IN (${Q.join(", ")})`)}else{let Q=`:fltval${Z}`;$.ExpressionAttributeValues[Q]=this.driver.marshall({v:U.value}).v,Y.push(`${_} ${U.operator} ${Q}`)}Z++}$.FilterExpression=Y.join(" AND ")}if(X.projectionAttributes&&X.projectionAttributes.length>0){let Y=[];for(let U of X.projectionAttributes){let _=`#proj${Z}`;$.ExpressionAttributeNames[_]=U,Y.push(_),Z++}$.ProjectionExpression=Y.join(", ")}if(X.limit!==void 0)$.Limit=X.limit;if(X.scanIndexForward!==void 0)$.ScanIndexForward=X.scanIndexForward;if(X.exclusiveStartKey)$.ExclusiveStartKey=this.driver.marshall(X.exclusiveStartKey);if(X.consistentRead)$.ConsistentRead=X.consistentRead;if(Object.keys($.ExpressionAttributeNames).length===0)delete $.ExpressionAttributeNames;if(Object.keys($.ExpressionAttributeValues).length===0)delete $.ExpressionAttributeValues;return $}toScanRequest(){let X=this.buildScanParams(),$={TableName:X.tableName};if(X.indexName)$.IndexName=X.indexName;if(X.filterConditions&&X.filterConditions.length>0){let{expression:Z,expressionAttributeNames:Y,expressionAttributeValues:U}=this.driver.buildFilterExpression(X.filterConditions);$.FilterExpression=Z,$.ExpressionAttributeNames=Y,$.ExpressionAttributeValues=U}if(X.projectionAttributes&&X.projectionAttributes.length>0){let{expression:Z,expressionAttributeNames:Y}=this.driver.buildProjectionExpression(X.projectionAttributes);$.ProjectionExpression=Z,$.ExpressionAttributeNames={...$.ExpressionAttributeNames,...Y}}if(X.limit!==void 0)$.Limit=X.limit;if(X.exclusiveStartKey)$.ExclusiveStartKey=this.driver.marshall(X.exclusiveStartKey);if(X.consistentRead)$.ConsistentRead=X.consistentRead;return $}async query(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toQueryRequest() to get the request params.");let X=this.toQueryRequest(),$=await this.client.query(X);return{items:$.Items?.map((Z)=>this.driver.unmarshall(Z)),count:$.Count,scannedCount:$.ScannedCount,lastEvaluatedKey:$.LastEvaluatedKey?this.driver.unmarshall($.LastEvaluatedKey):void 0,consumedCapacity:$.ConsumedCapacity}}async scan(){if(!this.client)throw Error("DynamoDB client not provided. Pass a client in options or use toScanRequest() to get the request params.");let X=this.toScanRequest(),$=await this.client.scan(X);return{items:$.Items?.map((Z)=>this.driver.unmarshall(Z)),count:$.Count,scannedCount:$.ScannedCount,lastEvaluatedKey:$.LastEvaluatedKey?this.driver.unmarshall($.LastEvaluatedKey):void 0,consumedCapacity:$.ConsumedCapacity}}async getAll(){let X=[],$;do{if($)this.startFrom($);let Z=this.keyConditions.length>0?await this.query():await this.scan();if(Z.items)X.push(...Z.items);$=Z.lastEvaluatedKey}while($);return X}async first(){return this.limit(1),(this.keyConditions.length>0?await this.query():await this.scan()).items?.[0]}async count(){if(!this.client)throw Error("DynamoDB client not provided");let X=this.keyConditions.length>0?this.toQueryRequest():this.toScanRequest();return X.Select="COUNT",(this.keyConditions.length>0?await this.client.query(X):await this.client.scan(X)).Count??0}reset(){return this.indexName=void 0,this.entityType=void 0,this.keyConditions=[],this.filterConditions=[],this.projectionAttrs=[],this.limitValue=void 0,this.scanForward=!0,this.consistentReadValue=!1,this.startKey=void 0,this}}class d9{driver;client;tableName;itemData={};keyData={};updateExpressions={};conditionExpr;returnValuesOption="NONE";constructor(X){this.driver=dX(X.config),this.client=X.client,this.tableName=X.config.tableName??""}table(X){return this.tableName=X,this}key(X){return this.keyData=X,this}item(X){return this.itemData=X,this}set(X,$){if(!this.updateExpressions.set)this.updateExpressions.set={};return this.updateExpressions.set[X]=$,this}setMany(X){if(!this.updateExpressions.set)this.updateExpressions.set={};return Object.assign(this.updateExpressions.set,X),this}remove(X){if(!this.updateExpressions.remove)this.updateExpressions.remove=[];return this.updateExpressions.remove.push(X),this}add(X,$){if(!this.updateExpressions.add)this.updateExpressions.add={};return this.updateExpressions.add[X]=$,this}deleteFromSet(X,$){if(!this.updateExpressions.delete)this.updateExpressions.delete={};return this.updateExpressions.delete[X]=$,this}condition(X){return this.conditionExpr=X,this}ifNotExists(X="pk"){return this.conditionExpr=`attribute_not_exists(${X})`,this}ifExists(X="pk"){return this.conditionExpr=`attribute_exists(${X})`,this}returnOld(){return this.returnValuesOption="ALL_OLD",this}returnNew(){return this.returnValuesOption="ALL_NEW",this}toPutRequest(){let X={TableName:this.tableName,Item:this.driver.marshall(this.itemData)};if(this.conditionExpr)X.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")X.ReturnValues=this.returnValuesOption;return X}toUpdateRequest(){let X={TableName:this.tableName,Key:this.driver.marshall(this.keyData)},{expression:$,expressionAttributeNames:Z,expressionAttributeValues:Y}=this.driver.buildUpdateExpression(this.updateExpressions);if($)X.UpdateExpression=$,X.ExpressionAttributeNames=Z,X.ExpressionAttributeValues=Y;if(this.conditionExpr)X.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")X.ReturnValues=this.returnValuesOption;return X}toDeleteRequest(){let X={TableName:this.tableName,Key:this.driver.marshall(this.keyData)};if(this.conditionExpr)X.ConditionExpression=this.conditionExpr;if(this.returnValuesOption!=="NONE")X.ReturnValues=this.returnValuesOption;return X}toGetRequest(){return{TableName:this.tableName,Key:this.driver.marshall(this.keyData)}}async put(){if(!this.client)throw Error("DynamoDB client not provided");let X=this.toPutRequest(),$=await this.client.putItem(X);if($.Attributes)return this.driver.unmarshall($.Attributes);return}async update(){if(!this.client)throw Error("DynamoDB client not provided");let X=this.toUpdateRequest(),$=await this.client.updateItem(X);if($.Attributes)return this.driver.unmarshall($.Attributes);return}async delete(){if(!this.client)throw Error("DynamoDB client not provided");let X=this.toDeleteRequest(),$=await this.client.deleteItem(X);if($.Attributes)return this.driver.unmarshall($.Attributes);return}async get(){if(!this.client)throw Error("DynamoDB client not provided");let X=this.toGetRequest(),$=await this.client.getItem(X);if($.Item)return this.driver.unmarshall($.Item);return}}function MO(X){return new pX(X)}function HO(X){return new d9(X)}function CO(X){let $=dX(X.config);return{query:()=>new pX(X),item:()=>new d9(X),driver:$,registerEntity:(Z)=>$.registerEntity(Z),buildKey:(Z,Y)=>$.buildPrimaryKey(Z,Y)}}var D5=()=>{};class w7{config;entities=new Map;pkAttribute;skAttribute;typeAttribute;constructor(X){this.config=X,this.pkAttribute=X.pkAttribute??"pk",this.skAttribute=X.skAttribute??"sk",this.typeAttribute=X.typeAttribute??"_type";for(let $ of X.entities)this.entities.set($.name,$)}getEntity(X){return this.entities.get(X)}registerEntity(X){this.entities.set(X.name,X)}buildKey(X,$){let Z=this.entities.get(X);if(!Z)throw Error(`Entity not found: ${X}`);let Y=this.interpolatePattern(Z.pkPattern,$),U=this.interpolatePattern(Z.skPattern,$);return{pk:Y,sk:U}}buildGSIKey(X,$,Z){let Y=this.entities.get(X);if(!Y)throw Error(`Entity not found: ${X}`);let U=Y.indexes?.find((L)=>L.name===$);if(!U)throw Error(`GSI not found: ${$} for entity ${X}`);let _=this.interpolatePattern(U.pkPattern,Z),Q=U.skPattern?this.interpolatePattern(U.skPattern,Z):void 0;return{pk:_,sk:Q}}createItem(X,$){let{pk:Z,sk:Y}=this.buildKey(X,$),U=this.entities.get(X),_={[this.pkAttribute]:Z,[this.skAttribute]:Y,[this.typeAttribute]:X,...$};if(U.indexes)for(let Q of U.indexes){let L=this.buildGSIKey(X,Q.name,$),z=this.config.indexes?.find((j)=>j.name===Q.name);if(z){if(_[z.pkAttribute]=L.pk,z.skAttribute&&L.sk)_[z.skAttribute]=L.sk}}return _}parseEntityType(X){if(X[this.typeAttribute])return X[this.typeAttribute];let $=X[this.pkAttribute];if(!$)return;for(let[Z,Y]of this.entities){let U=Y.pkPattern.split("${")[0];if($.startsWith(U))return Z}return}parseItem(X){let $=this.parseEntityType(X);if(!$)return;let{[this.pkAttribute]:Z,[this.skAttribute]:Y,[this.typeAttribute]:U,..._}=X;return{type:$,data:_}}getEntityPrefix(X){let $=this.entities.get(X);if(!$)throw Error(`Entity not found: ${X}`);return $.pkPattern.split("${")[0]}generateTableDefinition(){let X=[{name:this.pkAttribute,type:"S"},{name:this.skAttribute,type:"S"}],$=[];if(this.config.indexes)for(let Z of this.config.indexes){if(!X.find((Y)=>Y.name===Z.pkAttribute))X.push({name:Z.pkAttribute,type:"S"});if(Z.skAttribute&&!X.find((Y)=>Y.name===Z.skAttribute))X.push({name:Z.skAttribute,type:"S"});$.push({indexName:Z.name,keySchema:{partitionKey:Z.pkAttribute,sortKey:Z.skAttribute},projection:{type:"ALL"}})}return{tableName:this.config.tableName,keySchema:{partitionKey:this.pkAttribute,sortKey:this.skAttribute},attributeDefinitions:X,globalSecondaryIndexes:$.length>0?$:void 0,billingMode:"PAY_PER_REQUEST"}}interpolatePattern(X,$){return X.replace(/\$\{(\w+)\}/g,(Z,Y)=>{if(!(Y in $))throw Error(`Missing value for pattern key: ${Y}`);return String($[Y])})}}class q7{manager;entityName;options;constructor(X,$,Z){this.manager=X,this.entityName=$,this.options=Z}async create(X){let $=this.manager.createItem(this.entityName,X),Z=new d9(this.options).table(this.options.config.tableName).item($).ifNotExists("pk");if(this.options.client)await Z.put();return X}async get(X){let{pk:$,sk:Z}=this.manager.buildKey(this.entityName,X),Y=new d9(this.options).table(this.options.config.tableName).key({pk:$,sk:Z});if(!this.options.client)throw Error("DynamoDB client not provided");let U=await Y.get();if(!U)return;return this.manager.parseItem(U)?.data}async update(X,$){let{pk:Z,sk:Y}=this.manager.buildKey(this.entityName,X),U=new d9(this.options).table(this.options.config.tableName).key({pk:Z,sk:Y}).setMany($).ifExists("pk").returnNew();if(!this.options.client)throw Error("DynamoDB client not provided");let _=await U.update();if(!_)return;return this.manager.parseItem(_)?.data}async delete(X){let{pk:$,sk:Z}=this.manager.buildKey(this.entityName,X),Y=new d9(this.options).table(this.options.config.tableName).key({pk:$,sk:Z});if(!this.options.client)throw Error("DynamoDB client not provided");return await Y.delete(),!0}query(){return new P7(this.manager,this.entityName,this.options)}async findAll(){let X=this.manager.typeAttribute??"_type",$=new pX(this.options).table(this.options.config.tableName).whereEquals(X,this.entityName);if(!this.options.client)throw Error("DynamoDB client not provided");return(await $.getAll()).map((Y)=>this.manager.parseItem(Y)).filter((Y)=>Y!==void 0).map((Y)=>Y.data)}}class P7{manager;entityName;options;builder;pkValue;skConditions=[];constructor(X,$,Z){this.manager=X,this.entityName=$,this.options=Z,this.builder=new pX(Z).table(Z.config.tableName)}wherePartitionKey(X){let{pk:$}=this.manager.buildKey(this.entityName,X);this.pkValue=$;let Z=this.manager.pkAttribute??"pk";return this.builder.wherePartitionKey(Z,$),this}whereSortKey(X){let{sk:$}=this.manager.buildKey(this.entityName,X),Z=this.manager.skAttribute??"sk";return this.builder.whereSortKey(Z,$),this}whereSortKeyBeginsWith(X){let $=this.manager.skAttribute??"sk";return this.builder.whereSortKeyBeginsWith($,X),this}useIndex(X,$){let Z=this.manager.buildGSIKey(this.entityName,X,$),Y=this.manager.config.indexes?.find((U)=>U.name===X);if(!Y)throw Error(`GSI configuration not found: ${X}`);return this.builder.index(X),this.builder.wherePartitionKey(Y.pkAttribute,Z.pk),this}where(X,$,Z){return this.builder.where(X,$,Z),this}select(...X){return this.builder.select(...X),this}limit(X){return this.builder.limit(X),this}descending(){return this.builder.descending(),this}async execute(){if(!this.options.client)throw Error("DynamoDB client not provided");return((await this.builder.query()).items??[]).map(($)=>this.manager.parseItem($)).filter(($)=>$!==void 0).map(($)=>$.data)}async first(){return this.limit(1),(await this.execute())[0]}}function Lj(X){return new w7(X)}function jj(X,$,Z){return new q7(X,$,Z)}var Ej,T7=e(()=>{D5(),Ej={simpleEntity:(X,$="id")=>({name:X,pkPattern:`${X.toUpperCase()}#\${${$}}`,skPattern:"METADATA",keyFields:[$]}),oneToMany:(X,$,Z="id",Y="id")=>({parent:{name:X,pkPattern:`${X.toUpperCase()}#\${${Z}}`,skPattern:"METADATA",keyFields:[Z]},child:{name:$,pkPattern:`${X.toUpperCase()}#\${${Z}}`,skPattern:`${$.toUpperCase()}#\${${Y}}`,keyFields:[Z,Y]}}),manyToMany:(X,$,Z="id",Y="relatedId")=>({entity:{name:X,pkPattern:`${X.toUpperCase()}#\${${Z}}`,skPattern:"METADATA",keyFields:[Z]},relation:{name:$,pkPattern:`${X.toUpperCase()}#\${${Z}}`,skPattern:`${$.toUpperCase()}#\${${Y}}`,keyFields:[Z,Y],indexes:[{name:"GSI1",pkPattern:`${X.toUpperCase()}#\${${Y}}`,skPattern:`${$.toUpperCase()}#\${${Z}}`}]}}),hierarchical:(X,$="rootId",Z="path")=>({name:X,pkPattern:`ROOT#\${${$}}`,skPattern:`PATH#\${${Z}}`,keyFields:[$,Z]})}});function K6(X,$){let Z={};for(let[Y,U]of Object.entries(X))if(U)Z[Y]=U.replace(/\{([^}]+)\}/g,(_,Q)=>{return $[Q]!==void 0?String($[Q]):`{${Q}}`});return Z}async function Gj(X){return{models:new Map}}function wO(X){return X}function qO(X){return X}function PO(X){return X}function TO(X){return X}class N7{config;driver;singleTableManager;models=new Map;queryBuilderOptions;constructor(X){this.config={pkAttribute:"pk",skAttribute:"sk",entityTypeAttribute:"_et",keyDelimiter:"#",...X};let $={region:X.region,endpoint:X.endpoint,credentials:X.credentials,tableName:X.tableName};this.driver=dX($);let Z={tableName:X.tableName,pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,indexes:this.buildGSIConfig(),entities:[]};this.singleTableManager=Lj(Z),this.queryBuilderOptions={config:$}}setClient(X){return this.queryBuilderOptions.client=X,this}async discoverModels(){if(!this.config.modelsPath)throw Error("modelsPath must be configured to use discoverModels()");let X=await Gj({queryBuilder:{modelsPath:this.config.modelsPath},singleTable:{pkAttribute:this.config.pkAttribute,skAttribute:this.config.skAttribute,typeAttribute:this.config.entityTypeAttribute,delimiter:this.config.keyDelimiter}}),$=[];for(let[,Z]of X.models)this.registerParsedModel(Z),$.push(Z);return $}registerModel(X){let $=this.parseWithTooling(X);return this.registerParsedModel($)}registerParsedModel(X){this.models.set(X.name,X);let $=this.toSingleTableEntity(X);this.singleTableManager.registerEntity($);let Z=this.toEntityMapping(X);return this.driver.registerEntity(Z),X}registerModels(X){return X.map(($)=>this.registerModel($))}getModel(X){return this.models.get(X)}getAllModels(){return Array.from(this.models.values())}repository(X){if(!this.models.get(X))throw Error(`Model not found: ${X}`);return jj(this.singleTableManager,X,this.queryBuilderOptions)}query(X){if(!this.models.get(X))throw Error(`Model not found: ${X}`);return new pX(this.queryBuilderOptions).table(this.config.tableName).entity(X)}item(X){if(!this.models.get(X))throw Error(`Model not found: ${X}`);return new d9(this.queryBuilderOptions).table(this.config.tableName)}buildKey(X,$){let Z=this.models.get(X);if(!Z)throw Error(`Model not found: ${X}`);let Y=K6(Z.keyPatterns,$);return{pk:Y.pk,sk:Y.sk}}createItem(X,$){let Z=this.models.get(X);if(!Z)throw Error(`Model not found: ${X}`);let Y=K6(Z.keyPatterns,$),U=Y.pk,_=Y.sk,Q={[this.config.pkAttribute]:U,[this.config.skAttribute]:_,[this.config.entityTypeAttribute]:Z.name,...$};if(Z.hasTimestamps){let L=new Date().toISOString();if(!Q.createdAt)Q.createdAt=L;Q.updatedAt=L}if(Z.hasVersioning){if(!Q._v)Q._v=1}return Q}parseItem(X){let $=X[this.config.entityTypeAttribute];if(!$)return;let{[this.config.pkAttribute]:Z,[this.config.skAttribute]:Y,[this.config.entityTypeAttribute]:U,..._}=X;return{type:$,data:_}}getDriver(){return this.driver}getSingleTableManager(){return this.singleTableManager}generateTableDefinition(){return this.singleTableManager.generateTableDefinition()}generateAccessPatterns(X){let $=this.models.get(X);if(!$)throw Error(`Model not found: ${X}`);return $.accessPatterns}parseWithTooling(X){let $=X.name.toUpperCase(),Z=X.primaryKey??"id",Y=this.config.keyDelimiter,U=this.parseAttributes(X),_=this.parseRelationships(X,Z),Q={pk:`${$}${Y}{${Z}}`,sk:`${$}${Y}{${Z}}`,...this.deriveGSIKeyPatterns($,Z,Y,_)},L=this.deriveAccessPatterns(X.name,$,Z,_);return{name:X.name,entityType:$,primaryKey:Z,attributes:U,relationships:_,keyPatterns:Q,accessPatterns:L,traits:X.traits??{},hasTimestamps:X.traits?.useTimestamps??!1,hasSoftDeletes:X.traits?.useSoftDeletes??!1,hasUuid:X.traits?.useUuid??!1,hasTtl:X.traits?.useTtl??!1,hasVersioning:X.traits?.useVersioning??!1,original:X}}parseAttributes(X){let $=[];if($.push({name:X.primaryKey??"id",fillable:!1,required:!0,nullable:!1,unique:!0,hidden:!1,dynamoDbType:"S"}),X.attributes)for(let[Z,Y]of Object.entries(X.attributes))$.push({name:Z,fillable:Y.fillable??!0,required:Y.required??!1,nullable:Y.nullable??!0,unique:Y.unique??!1,hidden:Y.hidden??!1,defaultValue:Y.default,cast:Y.cast,dynamoDbType:this.inferDynamoDBType(Y)});if(X.traits?.useTimestamps)$.push({name:"createdAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"},{name:"updatedAt",fillable:!1,required:!0,nullable:!1,unique:!1,hidden:!1,dynamoDbType:"S"});if(X.traits?.useSoftDeletes)$.push({name:"deletedAt",fillable:!1,required:!1,nullable:!0,unique:!1,hidden:!1,dynamoDbType:"S"});return $}inferDynamoDBType(X){if(X.cast){let $=X.cast.toLowerCase();if(["integer","int","float","double","decimal","number"].includes($))return"N";if(["boolean","bool"].includes($))return"BOOL";if(["array","list"].includes($))return"L";if(["object","json","map"].includes($))return"M"}if(X.validation?.rule){let $=String(X.validation.rule);if($.includes("integer")||$.includes("numeric")||$.includes("number"))return"N";if($.includes("boolean"))return"BOOL";if($.includes("array"))return"L";if($.includes("object"))return"M"}return"S"}parseRelationships(X,$){let Z=[];if(X.hasOne)for(let Y of X.hasOne)Z.push({type:"hasOne",relatedModel:Y,foreignKey:`${X.name.toLowerCase()}Id`,localKey:$,requiresGsi:!0});if(X.hasMany)for(let Y of X.hasMany)Z.push({type:"hasMany",relatedModel:Y,foreignKey:`${X.name.toLowerCase()}Id`,localKey:$,requiresGsi:!1});if(X.belongsTo)for(let Y of X.belongsTo)Z.push({type:"belongsTo",relatedModel:Y,foreignKey:`${Y.toLowerCase()}Id`,localKey:$,requiresGsi:!0});if(X.belongsToMany){let Y=Array.isArray(X.belongsToMany)?X.belongsToMany:Object.values(X.belongsToMany);for(let U of Y){let _=typeof U==="string"?U:U?.model;if(!_)continue;let Q=[X.name,_].sort();Z.push({type:"belongsToMany",relatedModel:_,foreignKey:`${X.name.toLowerCase()}Id`,localKey:$,pivotEntity:Q.join(""),requiresGsi:!0})}}return Z}deriveGSIKeyPatterns(X,$,Z,Y){let U={},_=1;for(let Q of Y)if(Q.requiresGsi&&_<=5)U[`gsi${_}pk`]=`${Q.relatedModel.toUpperCase()}${Z}{${Q.foreignKey}}`,U[`gsi${_}sk`]=`${X}${Z}{${$}}`,Q.gsiIndex=_,_++;return U}deriveAccessPatterns(X,$,Z,Y){let U=[];U.push({name:`Get ${X} by ID`,description:`Retrieve a single ${X} by its primary key`,entityType:$,operation:"get",index:"main",keyCondition:"pk = :pk AND sk = :sk",examplePk:`${$}#123`,exampleSk:`${$}#123`,efficient:!0}),U.push({name:`List all ${X}s`,description:`Scan all ${X} entities`,entityType:$,operation:"scan",index:"scan",keyCondition:"_et = :entityType",examplePk:$,efficient:!1});for(let _ of Y){if(_.type==="hasMany")U.push({name:`Get ${_.relatedModel}s for ${X}`,description:`Query ${_.relatedModel}s related to a ${X}`,entityType:$,operation:"query",index:"main",keyCondition:"pk = :pk AND begins_with(sk, :skPrefix)",examplePk:`${$}#123`,exampleSk:`${_.relatedModel.toUpperCase()}#`,efficient:!0});if(_.gsiIndex){let Q=`GSI${_.gsiIndex}`;U.push({name:`Get ${X}s by ${_.relatedModel}`,description:`Query ${X}s by their related ${_.relatedModel}`,entityType:$,operation:"query",index:Q,keyCondition:`gsi${_.gsiIndex}pk = :pk`,examplePk:`${_.relatedModel.toUpperCase()}#123`,efficient:!0})}}return U}toSingleTableEntity(X){let $=this.extractKeyFields(X.keyPatterns.pk);return{name:X.name,pkPattern:X.keyPatterns.pk,skPattern:X.keyPatterns.sk,keyFields:$,indexes:this.extractGSIPatterns(X.keyPatterns)}}extractKeyFields(X){let $=X.match(/\{([^}]+)\}/g);if(!$)return[];return $.map((Z)=>Z.slice(1,-1))}extractGSIPatterns(X){let $=[];for(let Z=1;Z<=5;Z++){let Y=`gsi${Z}pk`,U=`gsi${Z}sk`;if(X[Y])$.push({name:`GSI${Z}`,pkPattern:X[Y],skPattern:X[U]})}return $.length>0?$:void 0}toEntityMapping(X){return{entityType:X.name,pkPattern:X.keyPatterns.pk,skPattern:X.keyPatterns.sk}}buildGSIConfig(){let X=this.config.gsiConfig??{},$=[];if(X.gsi1pk)$.push({name:"GSI1",pkAttribute:X.gsi1pk,skAttribute:X.gsi1sk});if(X.gsi2pk)$.push({name:"GSI2",pkAttribute:X.gsi2pk,skAttribute:X.gsi2sk});if(X.gsi3pk)$.push({name:"GSI3",pkAttribute:X.gsi3pk,skAttribute:X.gsi3sk});return $}}function NO(X){return new N7(X)}function SO(X){return X.accessPatterns}function AO(X,$="#"){let Z=X.name.toUpperCase(),Y=X.primaryKey??"id";return{name:X.name,pkPattern:`${Z}${$}\${${Y}}`,skPattern:`${Z}${$}\${${Y}}`}}var Fj=e(()=>{D5(),T7()});function S7(X){let $={};for(let Z of Object.keys(X)){let Y=X[Z],U=Y.definition??Y.getDefinition?.()??Y,_=U.table||`${String(U.name).toLowerCase()}s`,Q=U.attributes??{},L={};for(let z of Object.keys(Q))L[z]=void 0;$[_]={columns:L,primaryKey:U.primaryKey??"id"}}return $}async function cX(X){let $=X.cwd??Ij.cwd(),Z=X.modelsDir.startsWith("/")?X.modelsDir:`${$}/${X.modelsDir}`,Y={},U=Oj(Z);for(let _ of U){let Q=`${Z}/${_}`;if(Jj(Q).isDirectory())continue;let z=Vj(Q);if(![".ts",".mts",".cts",".js",".mjs",".cjs"].includes(z))continue;let j=`?t=${Date.now()}-${Math.random().toString(36).slice(2)}`,E=await import(`${Q}${j}`),W=E.default??E,G=W.definition??W.getDefinition?.()??W,J=Wj(_,z),V=G.name??J;Y[V]={...G,name:V}}return Y}var Rj=()=>{};function Kj(X){let $={},Z={},Y={},U={},_={};for(let Q of Object.keys(X)){let L=X[Q],z=L.definition??L.getDefinition?.()??L,j=z.table||`${String(z.name).toLowerCase()}s`;$[Q]=j,Z[j]=Q,Y[j]=z.primaryKey??"id";let E=(J)=>{if(!J)return{};let V={};if(Array.isArray(J)){for(let F of J){let R=h1(F);if(R)V[R.model]=R.model}return V}if(typeof J==="object"){for(let[F,R]of Object.entries(J)){let D=h1(R);if(D)V[F]=D.model}return V}return{}},W=(J)=>{if(!J)return{};if(Array.isArray(J)){let V={};for(let F of J)if(typeof F==="string")V[F]=F;else if(F&&typeof F==="object"&&typeof F.model==="string")V[F.model]=F;return V}return J},G=(J)=>{if(!J)return{};return J};if(U[j]={hasOne:E(z.hasOne),hasMany:E(z.hasMany),belongsTo:E(z.belongsTo),belongsToMany:W(z.belongsToMany),hasOneThrough:G(z.hasOneThrough),hasManyThrough:G(z.hasManyThrough),morphOne:E(z.morphOne),morphMany:E(z.morphMany),morphTo:z.morphTo,morphToMany:E(z.morphToMany),morphedByMany:E(z.morphedByMany)},z.scopes&&typeof z.scopes==="object"){_[j]={};for(let J of Object.keys(z.scopes)){let V=z.scopes[J];if(typeof V==="function")_[j][J]=V}}}return{modelToTable:$,tableToModel:Z,primaryKeys:Y,relations:U,scopes:_,models:X}}var A7=()=>{};function s0(X){if(v.verbose)console.log(X)}function TX(X){return X.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/(\d)([A-Z])/gi,"$1_$2").toLowerCase()}function W1(X){return zZ(v.relations?.singularizeStrategy)(X)}function Hj(X){let $=X;while($!==D6($)){if(k7(M5($,"package.json")))return $;$=D6($)}return x7.cwd()}function Cj(){let X=Hj(x7.cwd()),$=M5(X,"database","migrations");if(!k7($))Dj($,{recursive:!0}),s0(`-- Created SQL directory: ${$}`);return $}function B7(X,$){if(!X)return!1;let Z=Cj();N8++;let U=`${w5?String(N8).padStart(10,"0"):String(Math.floor(Date.now()/1000)+N8)}-${$}.sql`,_=M5(Z,U);return Mj(_,X),s0(`-- Migration file created: ${U}`),y9++,!0}function M6(X){if(X.endsWith("_id"))return"bigint";if(X.endsWith("_at"))return"datetime";if(X.startsWith("is_")||X.startsWith("has_"))return"boolean";return}function H6(X){if(typeof X==="string"||typeof X==="number"||typeof X==="boolean"||typeof X==="bigint"||X instanceof Date)return X;return}function wj(X){if(X&&typeof X==="object"&&"name"in X){let $=X;if($.name==="enum"||$.getRules&&Array.isArray($.getRules())){if($.enumValues&&Array.isArray($.enumValues))return $.enumValues.map((Z)=>String(Z));if($._values&&Array.isArray($._values))return $._values.map((Z)=>String(Z));if($.values&&Array.isArray($.values))return $.values.map((Z)=>String(Z))}}if(X&&typeof X==="object"){let $=X,Z=$.allowedValues||$.enumValues||$._values||$.values;if(Array.isArray(Z)&&Z.length>0)return Z.map((Y)=>String(Y))}return}function y7(X){if(!X?.rules||!Array.isArray(X.rules))return;for(let $ of X.rules)if($?.name==="max"||$?.name==="maxLength"){if($.params&&typeof $.params.max==="number")return $.params.max;if(Array.isArray($.args)&&typeof $.args[0]==="number")return $.args[0];if(typeof $.value==="number")return $.value;if(typeof $.expectedValue==="number")return $.expectedValue}return}function qj(X){if(!X||typeof X!=="object")return;let $=X;if($.name)switch(String($.name).toLowerCase()){case"string":case"text":{let Y=y7($);return Y&&Y>255?"text":"string"}case"integer":case"int":return"integer";case"bigint":return"bigint";case"float":return"float";case"number":return"integer";case"double":return"double";case"decimal":return"decimal";case"boolean":case"bool":return"boolean";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamptz":case"timestamp_tz":return"timestamptz";case"json":return"json";case"enum":return"enum"}if($.type){let Z=String($.type).toLowerCase();if(Z==="string"||Z==="text")return"string";if(Z==="integer"||Z==="int")return"integer";if(Z==="bigint")return"bigint";if(Z==="float")return"float";if(Z==="number")return"integer";if(Z==="boolean")return"boolean";if(Z==="date")return"date";if(Z==="datetime")return"datetime";if(Z==="timestamptz"||Z==="timestamp_tz")return"timestamptz";if(Z==="json")return"json"}return}function Pj(X){if(typeof X!=="string")return;switch(X.trim().toLowerCase().replace(/[\s-]+/g,"_")){case"varchar":case"string":return"string";case"text":return"text";case"bool":case"boolean":return"boolean";case"int":case"integer":return"integer";case"bigint":return"bigint";case"float":return"float";case"double":return"double";case"number":case"numeric":case"decimal":return"decimal";case"date":return"date";case"datetime":case"timestamp":return"datetime";case"timestamp_tz":case"timestamptz":case"timestamp_with_time_zone":return"timestamptz";case"json":case"jsonb":return"json";case"enum":return"enum";default:return}}function H5(X,$){let Z=Kj(X),Y=[];for(let Q of Object.keys(X)){let L=X[Q],z=L.table||`${String(L.name).toLowerCase()}s`,j=L.primaryKey??"id",E=L.autoIncrement!==!1,W=L.attributes??{},G=[],J=[];if(!W[j])G.push({name:TX(j),type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1});for(let H of Object.keys(W)){let N=W[H],A=TX(H),h=Boolean(N.validation?.rule?.isRequired),d=H===j?!1:N.nullable??!(N.required??h),b,l,s=H===j;if(b=Pj(N.type)??qj(N.validation?.rule),!b||b==="enum"){let m=wj(N.validation?.rule);if(m&&m.length>0)b="enum",l=m}if(!b)b=M6(A);if(!b){let m=H6(N.default);if(typeof m==="string")b=m.length>255?"text":"string";else if(typeof m==="number")b=Number.isInteger(m)?"integer":"float";else if(typeof m==="boolean")b="boolean";else if(typeof m==="bigint")b="bigint";else if(m instanceof Date)b="datetime"}if(!b)b=s?"bigint":"string";let n=b==="string"?y7(N.validation?.rule):void 0,u={name:A,type:b,isPrimaryKey:s,isUnique:Boolean(N.unique),isNullable:d,hasDefault:typeof N.default<"u",defaultValue:H6(N.default),enumValues:l,maxLength:typeof n==="number"&&n>0&&n<=255?n:void 0};if(A.endsWith("_id")&&N.foreignKey!==!1)if(typeof N.foreignKey==="object"&&N.foreignKey!==null){let m=N.foreignKey;if(u.references={table:m.table,column:m.column??"id",onDelete:m.onDelete,onUpdate:m.onUpdate},m.nullable!==void 0)u.isNullable=m.nullable}else{let X0=A.replace(/_id$/,"").replace(/(^|_)([a-z])/g,(z0,y,J9)=>J9.toUpperCase()),R0=Z.modelToTable[X0];if(R0){let z0=Z.primaryKeys[R0]??"id";u.references={table:R0,column:z0}}}G.push(u)}let V=pU(L.belongsTo);for(let H of V){let N=H.foreignKey??`${TX(H.model)}_id`;if(G.some((d)=>d.name===N))continue;let A=Z.modelToTable[H.model];if(!A)continue;let h=Z.primaryKeys[A]??"id";G.push({name:N,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1,references:{table:A,column:h,onDelete:H.onDelete}})}let F=L.traits;if(F?.useTimestamps??F?.timestampable??!1){if(!G.some((H)=>H.name==="created_at"))G.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"});if(!G.some((H)=>H.name==="updated_at"))G.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(F?.useSoftDeletes??F?.softDeletable??!1){if(!G.some((H)=>H.name==="deleted_at"))G.push({name:"deleted_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1})}if(F?.useUuid??!1){if(!G.some((H)=>H.name==="uuid"))G.push({name:"uuid",type:"string",isPrimaryKey:!1,isUnique:!0,isNullable:!0,hasDefault:!1})}for(let H of L.indexes??[])J.push({name:H.name,columns:H.columns.map((N)=>TX(N)),type:H.unique?"unique":"index",where:H.where});for(let H of G)if(H.isUnique&&!H.isPrimaryKey)J.push({name:`${z}_${H.name}_unique`,columns:[H.name],type:"unique"});let C=Array.isArray(L.shardKey)?L.shardKey.map(TX):void 0,S=Array.isArray(L.sortKey)?L.sortKey.map(TX):void 0,P=L.tableKind;Y.push({table:z,columns:G,indexes:J,shardKey:C,sortKey:S,tableKind:P})}let U=new Set(Y.map((Q)=>Q.table));function _(Q){if(!U.has(Q.table))U.add(Q.table),Y.push(Q)}for(let Q of Object.keys(X)){let L=X[Q],z=L?.traits??{},j=L.table||`${String(L.name).toLowerCase()}s`,E=W1(j);if(z.likeable){let W=typeof z.likeable==="object"?z.likeable:{},G=W.table||`${j}_likes`,J=W.foreignKey||`${E}_id`;_({table:G,columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"user_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"users",column:"id"}},{name:J,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:j,column:"id"}},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:`${G}_user_target_unique`,columns:["user_id",J],type:"unique"}]})}if(z.taggable)_({table:"taggable",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"order",type:"integer",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:0},{name:"is_active",type:"boolean",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:!0},{name:"taggable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"taggable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"taggable_target_index",columns:["taggable_id","taggable_type"],type:"index"}]});if(z.categorizable)_({table:"categorizable",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"name",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"slug",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"description",type:"text",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"},{name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1}],indexes:[{name:"categorizable_slug_unique",columns:["slug"],type:"unique"}]}),_({table:"categorizable_models",columns:[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"category_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:"categorizable",column:"id"}},{name:"categorizable_id",type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"categorizable_type",type:"string",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1},{name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"}],indexes:[{name:"categorizable_models_target_index",columns:["categorizable_id","categorizable_type"],type:"index"}]})}for(let Q of Object.keys(X)){let L=X[Q],z=L?.belongsToMany;if(!z||typeof z!=="object"||Array.isArray(z))continue;let j=L.table||`${String(L.name).toLowerCase()}s`,E=W1(j);for(let[W,G]of Object.entries(z)){let J=G;if(!J||typeof J!=="object")continue;if(J.through)continue;let V=J.pivot;if(!V||!V.columns&&!V.timestamps&&!V.uniques)continue;let F=J.model,D=X[F]?.table||`${String(F).toLowerCase()}s`,q=W1(D),C=J.table||[E,q].sort().join("_"),S=J.foreignKey||`${E}_id`,P=J.relatedKey||`${q}_id`,H=[{name:"id",type:"bigint",isPrimaryKey:!0,isUnique:!1,isNullable:!1,hasDefault:!1},{name:S,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:j,column:"id"}},{name:P,type:"bigint",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!1,references:{table:D,column:"id"}}];if(V.columns)for(let[h,d]of Object.entries(V.columns)){let b=d,l=M6(h)??"string";H.push({name:h,type:l,isPrimaryKey:!1,isUnique:!1,isNullable:b?.nullable??!1,hasDefault:b?.default!==void 0,defaultValue:b?.default})}if(V.timestamps)H.push({name:"created_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!1,hasDefault:!0,defaultValue:"CURRENT_TIMESTAMP"}),H.push({name:"updated_at",type:"datetime",isPrimaryKey:!1,isUnique:!1,isNullable:!0,hasDefault:!1});let N=[],A=V.uniques&&V.uniques.length>0?V.uniques:[[S,P]];for(let h=0;h<A.length;h++){let d=A[h];N.push({name:`${C}_${d.join("_")}_unique${h>0?`_${h}`:""}`,columns:[...d],type:"unique"})}_({table:C,columns:H,indexes:N})}}return{dialect:$.dialect,tables:Y}}function C5(X,$={}){N8=0,y9=0,p9=0,w5=!0;let Z=$.dryRun?()=>!1:B7,Y=[],U=YX(X.dialect),{tables:_,deferredForeignKeys:Q}=h7(X.tables,X.dialect);for(let[z,j]of _.entries()){let E={...j,columns:j.columns.map((F)=>Q.has(yX(j.table,F.name))?{...F,references:void 0}:F)},W=[],G=new Set;for(let F of E.columns)if(F.type==="enum"&&F.enumValues&&F.enumValues.length>0){let R=`${E.table}_${F.name}_type`;if(F.enumTypeName=R,!G.has(R)){let D=U.createEnumType(R,F.enumValues);if(D)W.push(D);G.add(R)}}let J=U.createTable(E);W.push(J);for(let F of E.indexes)W.push(U.createIndex(E.table,F));if(z===_.length-1)for(let F of _)for(let R of F.columns){if(!R.references||!Q.has(yX(F.table,R.name)))continue;let D=U.addForeignKey(F.table,R.name,R.references.table,R.references.column,R.references.onDelete,R.references.onUpdate);if(D)W.push(D)}Y.push(...W);let V=W.join(`
|
|
462
|
-
|
|
463
|
-
`);Z(V,`create-${E.table}-table`)}if(y9+p9===0)s0("-- Nothing to migrate");else{let z=[];if(y9>0)z.push(`${y9} created`);if(p9>0)z.push(`${p9} updated`);s0(`-- Migration files: ${z.join(", ")}`)}return Y}function yX(X,$){return`${X}\x00${$}`}function h7(X,$){if($==="sqlite"||X.length<2)return{tables:X,deferredForeignKeys:new Set};let Z=new Map(X.map((z)=>[z.table,z])),Y=new Map;for(let z of X)Y.set(z.table,new Set(z.columns.map((j)=>j.references?.table).filter((j)=>Boolean(j&&j!==z.table&&Z.has(j)))));let U=[],_=new Set;while(U.length<X.length){let z=X.find((j)=>!_.has(j.table)&&[...Y.get(j.table)??[]].every((E)=>_.has(E)));if(!z)break;U.push(z),_.add(z.table)}let Q=new Set(X.filter((z)=>!_.has(z.table)).map((z)=>z.table)),L=new Set;for(let z of X){if(!Q.has(z.table))continue;for(let j of z.columns)if(j.references&&Q.has(j.references.table)&&j.references.table!==z.table)L.add(yX(z.table,j.name))}return U.push(...X.filter((z)=>Q.has(z.table))),{tables:U,deferredForeignKeys:L}}function bO(X){return C5(X).join(`
|
|
464
|
-
`)}function fO(X,$){return xj(X,$).join(`
|
|
465
|
-
`)}function Tj(X){let $=Z2("crypto");function Z(U){if(U==null||typeof U!=="object"||U instanceof Date)return U;if(Array.isArray(U))return U.map((Q)=>Z(Q));let _={};for(let Q of Object.keys(U).sort())_[Q]=Z(U[Q]);return _}let Y=JSON.stringify(Z(X));return $.createHash("sha256").update(Y).digest("hex")}function C6(X){let $={};for(let Z of X)$[Z.table]=Z;return $}function F$(X){let $={};for(let Z of X)$[Z.name]=Z;return $}function o1(X,$){if($==="sqlite"){if(X.name.endsWith("_id")&&HU(X.type))return"INTEGER";switch(X.type){case"string":case"text":case"date":case"datetime":case"timestamptz":case"json":case"enum":return"TEXT";case"boolean":case"integer":case"bigint":return"INTEGER";case"float":case"double":case"decimal":return"REAL";default:return"TEXT"}}return X.type}function r1(X){if(!X.hasDefault||X.defaultValue===void 0)return;let $=X.defaultValue;if($ instanceof Date)return $.toISOString();if(typeof $==="boolean")return $?"1":"0";if(typeof $==="bigint"||typeof $==="number")return String($);let Z=String($).trim();if(Z=Z.replace(/::[\w ]+$/i,"").trim(),Z.startsWith("'")&&Z.endsWith("'")||Z.startsWith('"')&&Z.endsWith('"'))Z=Z.slice(1,-1);let Y=Z.toUpperCase();if(["CURRENT_TIMESTAMP","NOW()","CURRENT_DATE","CURRENT_TIME","NULL","TRUE","FALSE"].includes(Y))return Y==="NOW()"?"CURRENT_TIMESTAMP":Y;if(X.type==="boolean"){if(/^(?:1|t|true|yes)$/i.test(Z))return"1";if(/^(?:0|f|false|no)$/i.test(Z))return"0"}if(/^-?\d+(?:\.\d+)?$/.test(Z))return String(Number(Z));return Z}function Nj(X,$,Z){if(o1(X,Z)!==o1($,Z))return!0;if(X.isNullable!==$.isNullable)return!0;if(X.hasDefault!==$.hasDefault)return!0;if(r1(X)!==r1($))return!0;if(X.isUnique!==$.isUnique)return!0;if(X.type==="enum"&&$.type==="enum"){let Y=(X.enumValues||[]).slice().sort().join(","),U=($.enumValues||[]).slice().sort().join(",");if(Y!==U)return!0}return!1}function w6(X,$){return JSON.stringify([o1(X,$),X.isPrimaryKey,X.isUnique,X.isNullable,X.hasDefault,r1(X)??null,(X.enumValues??[]).slice().sort(),X.references?[X.references.table,X.references.column,X.references.onDelete??null,X.references.onUpdate??null]:null])}function Sj(X,$,Z){let Y=Object.keys(X).filter((E)=>!$[E]),U=Object.keys($).filter((E)=>!X[E]),_=new Map,Q=new Map;for(let E of Y){let W=w6(X[E],Z),G=_.get(W)??[];G.push(E),_.set(W,G)}for(let E of U){let W=w6($[E],Z),G=Q.get(W)??[];G.push(E),Q.set(W,G)}let L=[],z=new Set,j=new Set;for(let[E,W]of _){let G=Q.get(E);if(W.length===1&&G&&G.length===1)L.push({from:W[0],to:G[0]}),z.add(W[0]),j.add(G[0])}return{renames:L,removed:Y.filter((E)=>!z.has(E)),added:U.filter((E)=>!j.has(E))}}function Aj(X,$){let Z=X.columns.find((Y)=>Y.name===$);if(Z&&(Z.isPrimaryKey||Z.isUnique||Z.references))return!0;return X.indexes.some((Y)=>Y.columns.includes($))}function kj(X,$){if(Boolean(X)!==Boolean($))return!0;if(!X||!$)return!1;let Z=(Y)=>(Y??"no action").toLowerCase();return X.table!==$.table||X.column!==$.column||Z(X.onDelete)!==Z($.onDelete)||Z(X.onUpdate)!==Z($.onUpdate)}function q6(X){let $={};for(let Z of X){let Y=`${Z.type}:${Z.name}:${Z.columns.join(",")}`;$[Y]=Z}return $}function v7(X,$,Z={}){if(!X||X.dialect!==$.dialect){let D=C5($,{dryRun:Z.dryRun}),q=$.tables.map((C)=>({kind:"create_table",table:C.table,destructive:!1,sql:""}));return{statements:D,operations:q}}let Y=Z.applyRenames!==!1,U=Z.dryRun?()=>!1:B7;N8=0,y9=0,p9=0,w5=!1;let _=[],Q=[],L=YX($.dialect),z=$.dialect,j=C6(X.tables),E=C6($.tables);for(let D of Object.keys(j))if(!E[D]){let q=L.dropTable(D);_.push(q),Q.push({kind:"drop_table",table:D,destructive:!0,sql:q}),U(q,`drop-${D}-table`),s0(`-- Detected dropped table: ${D}`)}let W=Object.keys(E).filter((D)=>!j[D]).map((D)=>E[D]),{tables:G,deferredForeignKeys:J}=h7(W,z);for(let[D,q]of G.entries()){let C={...q,columns:q.columns.map((A)=>J.has(yX(q.table,A.name))?{...A,references:void 0}:A)},S=[],P=new Set;for(let A of C.columns)if(A.type==="enum"&&A.enumValues&&A.enumValues.length>0){let h=`${C.table}_${A.name}_type`;if(A.enumTypeName=h,!P.has(h)){let d=L.createEnumType(h,A.enumValues);if(d)S.push(d);P.add(h)}}let H=L.createTable(C);S.push(H);for(let A of C.indexes){let h=L.createIndex(C.table,A);S.push(h),Q.push({kind:"create_index",table:C.table,column:A.name,destructive:!1,sql:h})}for(let A of q.columns)if(A.references&&!J.has(yX(q.table,A.name)))Q.push({kind:"add_foreign_key",table:q.table,column:A.name,destructive:!1,sql:H});if(D===G.length-1)for(let A of G)for(let h of A.columns){if(!h.references||!J.has(yX(A.table,h.name)))continue;let d=L.addForeignKey(A.table,h.name,h.references.table,h.references.column,h.references.onDelete,h.references.onUpdate);if(!d)continue;S.push(d),Q.push({kind:"add_foreign_key",table:A.table,column:h.name,destructive:!1,sql:d})}_.push(...S),Q.push({kind:"create_table",table:C.table,destructive:!1,sql:H});let N=S.join(`
|
|
466
|
-
|
|
467
|
-
`);U(N,`create-${C.table}-table`)}let V=new Set;for(let D of Object.keys(E)){let q=j[D],C=E[D];if(!q)continue;let S=F$(q.columns),P=F$(C.columns);for(let H of Object.keys(P))if(!S[H]){let N=P[H];if(N.type==="enum"&&N.enumValues&&N.enumValues.length>0){let A=`${C.table}_${N.name}_type`;if(N.enumTypeName=A,!V.has(A)){let h=L.createEnumType(A,N.enumValues);if(h)_.push(h),Q.push({kind:"create_enum",table:C.table,column:N.name,destructive:!1,sql:h}),U(h,`create-${A}-enum`);V.add(A)}}}}for(let D of Object.keys(E)){let q=j[D],C=E[D];if(!q)continue;let S=F$(q.columns),P=F$(C.columns),H=q6(q.indexes),N=q6(C.indexes),A=[],h=Object.keys(S).filter((u)=>!P[u]),d=Object.keys(P).filter((u)=>!S[u]);if(Y){let u=Sj(S,P,z);A=u.renames,h=u.removed,d=u.added}let b=Object.keys(P).filter((u)=>S[u]&&Nj(S[u],P[u],z)),l=Object.keys(P).filter((u)=>S[u]&&kj(S[u].references,P[u].references));if(z==="sqlite"){if(b.length>0||l.length>0||h.some((m)=>Aj(q,m))){let m={},X0=new Map(A.map((G0)=>[G0.to,G0.from]));for(let G0 of C.columns)if(S[G0.name])m[G0.name]=G0.name;else if(X0.has(G0.name))m[G0.name]=X0.get(G0.name);let R0=`_qb_tmp_${C.table}`,z0=0;while((j[R0]||E[R0])&&z0<100)z0+=1,R0=`_qb_tmp_${C.table}_${z0}`;let y=L.rebuildTable({target:C,tempName:R0,columnSource:m});_.push(y);let J9=b.some((G0)=>S[G0].type!==P[G0].type);Q.push({kind:"rebuild_table",table:C.table,destructive:h.length>0||J9,sql:y});for(let G0 of A)Q.push({kind:"rename_column",table:C.table,from:G0.from,to:G0.to,destructive:!1,confidence:"high",sql:y});for(let G0 of h)Q.push({kind:"drop_column",table:C.table,column:G0,destructive:!0,sql:y});s0(`-- Detected SQLite table rebuild required: ${C.table}`),U(y,`alter-${C.table}-table`);continue}}let s=[],n=!1;for(let u of Object.keys(H))if(!N[u]){let m=H[u],X0=L.dropIndex(C.table,m.name);s.push(X0),_.push(X0),Q.push({kind:"drop_index",table:C.table,column:m.name,destructive:!1,sql:X0}),s0(`-- Detected dropped index: ${m.name} from ${C.table}`),n=!0}for(let u of A){let m=L.renameColumn(C.table,u.from,u.to);s.push(m),_.push(m),Q.push({kind:"rename_column",table:C.table,from:u.from,to:u.to,destructive:!1,confidence:"high",sql:m}),s0(`-- Detected renamed column: ${C.table}.${u.from} -> ${u.to}`),n=!0}for(let u of h){let m=L.dropColumn(C.table,u);s.push(m),_.push(m),Q.push({kind:"drop_column",table:C.table,column:u,destructive:!0,sql:m}),s0(`-- Detected dropped column: ${C.table}.${u}`),n=!0}for(let u of b){let m=S[u],X0=P[u],R0=L.modifyColumn(C.table,X0);s.push(R0),_.push(R0),Q.push({kind:"modify_column",table:C.table,column:u,destructive:m.type!==X0.type,sql:R0}),s0(`-- Detected column change: ${C.table}.${u} (${m.type} -> ${X0.type})`),n=!0}for(let u of l){let m=P[u];if(!m.references)continue;let X0=L.addForeignKey(C.table,m.name,m.references.table,m.references.column,m.references.onDelete,m.references.onUpdate);if(!X0)continue;s.push(X0),_.push(X0),Q.push({kind:"add_foreign_key",table:C.table,column:u,destructive:!1,sql:X0}),s0(`-- Detected foreign-key change: ${C.table}.${u} -> ${m.references.table}(${m.references.column})`),n=!0}for(let u of d){let m=P[u],X0=L.addColumn(C.table,m);if(s.push(X0),_.push(X0),Q.push({kind:"add_column",table:C.table,column:m.name,destructive:!1,sql:X0}),s0(`-- Detected new column: ${C.table}.${m.name}`),n=!0,m.references){let R0=L.addForeignKey(C.table,m.name,m.references.table,m.references.column,m.references.onDelete,m.references.onUpdate);if(R0)s.push(R0),_.push(R0),Q.push({kind:"add_foreign_key",table:C.table,column:m.name,destructive:!1,sql:R0})}}for(let u of Object.keys(N))if(!H[u]){let m=N[u],X0=L.createIndex(C.table,m);s.push(X0),_.push(X0),Q.push({kind:"create_index",table:C.table,column:m.name,destructive:!1,sql:X0}),s0(`-- Detected new index: ${m.name} in ${C.table}`),n=!0}if(n){let u=s.join(`
|
|
468
|
-
|
|
469
|
-
`);U(u,`alter-${C.table}-table`)}}if(y9+p9===0)s0("-- Nothing to migrate");else{let D=[];if(y9>0)D.push(`${y9} created`);if(p9>0)D.push(`${p9} updated`);s0(`-- Migration files: ${D.join(", ")}`)}return{statements:_.length===0?["-- No changes detected"]:_,operations:Q}}function xj(X,$,Z={}){return v7(X,$,Z).statements}var N8=0,y9=0,p9=0,w5=!0,Bj=e(()=>{d0(),jZ(),A7()});function gO(X){return X}class yj{get order(){return 100}get description(){return}}function dO(X){return X}var b0=e(()=>{S$(),S$(),kz(),N6(),LZ(),S$(),d0(),jZ(),D5(),T7(),Fj(),I2(),Rj(),A7(),Bj(),FU(),H7(),Q5()});b0();var f7=["PRAGMA journal_mode = WAL","PRAGMA foreign_keys = ON","PRAGMA busy_timeout = 5000","PRAGMA wal_autocheckpoint = 1"];function vj(X){for(let $ of f7)try{X.unsafe($).execute().catch(()=>{})}catch{}}var b7=new WeakSet;function g7(){try{let X=R7?.();if(!X||typeof X.run!=="function"||b7.has(X))return;for(let $ of f7)try{X.run($)}catch{}b7.add(X)}catch{}}function XJ(X){I7(X),g7()}function $J(X){let $=H0(X);if(!X?.sql&&v.dialect==="sqlite")vj($),g7();return $}var bj=new Map;function ZJ(X,$){let Z=JZ;if(typeof Z==="function")return Z(X,$);bj.set(X,$);let Y=typeof $?.getDefinition==="function"?$.getDefinition():$?.definition;if(Y&&typeof Y==="object")K5(Y);return $}var fj=/^[A-Z_][A-Z0-9_]*$/i;function gj(X,$={}){if(typeof X!=="string"||X.length===0)return{valid:!1,reason:"empty"};if(X.length>64)return{valid:!1,reason:"too-long"};if(!fj.test(X))return{valid:!1,reason:"invalid-shape"};if($.allowlist&&!$.allowlist.includes(X))return{valid:!1,reason:"not-in-allowlist"};return{valid:!0}}function YJ(X,$={}){let Z=gj(X,$);if(Z.valid)return;let Y=$.context?` in ${$.context}`:"";throw Error(`[query-builder] Refusing to use ${JSON.stringify(X)} as a SQL identifier${Y} \u2014 ${Z.reason}`)}var d7=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function dj(X){return typeof X==="string"&&d7.has(X.toLowerCase())}function UJ(X,$){if(dj(X))return;let Z=$?` in ${$}`:"";throw Error(`[query-builder] Refusing to use ${JSON.stringify(X)} as a SQL operator${Z} \u2014 not in the allowed set (${[...d7].join(", ")})`)}U5({snapshotDir:"storage/framework/database"});export{lG as wipeDatabase,dF as waitReady,Nz as validateSchema,gj as validateIdentifier,hF as unsafe,TO as unmarshallItem,qO as toModelInstance,wO as toDynamoDBItem,fG as tinker,rG as tableInfo,n_ as stripTrailingS,QQ as startConsole,AO as stacksModelToEntity,DQ as sqlTypeToAttr,yF as sql,zZ as singularizerFor,KF as showModel,ZQ as setQueryCacheMaxSize,U5 as setConfig,DO as seedModel,SU as saveMigrationSnapshot,Hz as runSeeders,kF as runSeeder,AG as runBenchmark,y_ as resolveSqlitePragmas,NX as resolvePivot,K6 as resolveKeyPattern,pQ as resetDatabase,SG as resetConnection,TF as relationDiagram,ZJ as registerModel,zj as registerBrowserModels,xG as raw,CF as queryExplainAll,DF as ping,Gj as parseStacksModels,nG as optimizeDatabase,KF as modelShow,JU as modelNameForTable,Yz as migrateStatus,GF as migrateRollback,XE as migrateModels,WF as migrateList,zF as migrateGenerate,PO as marshallObject,xF as makeSeeder,ZF as makeModel,cX as loadModels,kG as iterateAllPivots,dj as isSafeOperator,I0 as isMysqlLike,ej as isDefinitionEqual,rj as isBrowser,tG as introspectDatabase,aG as introspect,IQ as inspectTable,i_ as inflectSingular,pG as importData,A$ as hashTableDefinition,Tj as hashMigrationPlan,Uj as hasModel,f0 as getPlaceholders,i as getPlaceholder,Yj as getModelRegistry,$j as getModel,YX as getDialectDriver,R7 as getDatabase,wG as getConfig,oj as getBrowserConfig,Zj as getAllModels,bO as generateSqlString,C5 as generateSql,wQ as generateModelSource,AU as generateMigration,fO as generateDiffSqlString,xj as generateDiffSql,v7 as generateDiffOperations,TF as generateDiagram,SO as generateAccessPatterns,BF as freshDatabase,oG as file,E2 as extractTableDefinition,G2 as extractModelSchema,R6 as extractInsertId,I6 as extractChanges,dG as exportData,CF as explainAllQueries,sG as explain,dQ as executeMigration,V2 as dynamo,cG as dumpDatabase,dO as defineSeeder,gO as defineModels,K5 as defineModel,T1 as defaultConfig,lG as dbWipe,mG as dbStats,nG as dbOptimize,GQ as dbInfo,KO as createTableFromModel,Lj as createSingleTableManager,jj as createRepository,$J as createQueryBuilder,aL as createModel,J2 as createMigrationDriver,NO as createDynamoDBToolingAdapter,MO as createDynamoDBQueryBuilder,HO as createDynamoDBItemBuilder,dX as createDynamoDBDriver,CO as createDynamoDBClient,$E as createDynamo,k6 as createClient,Y2 as createBrowserModel,aj as createBrowserDb,F2 as convertSchemaToDefinition,XJ as configureOrm,tj as configureModels,sj as configureBrowser,v as config,$Q as clearQueryCache,_j as clearModelRegistry,gF as checkSchema,r1 as canonicalizeDefault,o1 as canonicalStorageType,yG as cacheStats,hG as cacheConfig,BG as cacheClear,Kj as buildSchemaMeta,H5 as buildMigrationPlan,O2 as buildDynamoDBMigrationPlan,S7 as buildDatabaseSchema,T6 as browserQuery,U2 as browserAuth,g7 as bootstrapModelExecutorPragmas,UJ as assertSafeOperator,YJ as assertSafeIdentifier,vj as applySqlitePragmas,_5 as applySqliteBootstrapPragmas,q7 as SingleTableRepository,P7 as SingleTableQueryBuilder,Ej as SingleTablePatterns,w7 as SingleTableManager,MU as SingleStoreDriver,yj as Seeder,CU as SQLiteDriver,f7 as SQLITE_BOOTSTRAP_PRAGMAS,$J as QueryBuilder,DU as PostgresDriver,j5 as MySQLDriver,L2 as Model,D9 as MIGRATIONS_TABLE,v6 as EntityQueryBuilder,N7 as DynamoDBToolingAdapter,pX as DynamoDBQueryBuilder,B6 as DynamoDBMigrationTracker,h6 as DynamoDBMigrationDriver,d9 as DynamoDBItemBuilder,S6 as DynamoDBDriverImpl,A6 as DynamoDBClient,jU as DEFAULT_SQLITE_PRAGMAS,h9 as BrowserQueryError,P6 as BrowserQueryBuilder,M7 as BelongsToManyRelationBuilder};
|
|
2
|
+
import{setConfig as Y}from"bun-query-builder";import*as H from"bun-query-builder";import{config as Z,createQueryBuilder as $}from"bun-query-builder";export*from"bun-query-builder";import{saveMigrationSnapshot as w}from"bun-query-builder";var V=["PRAGMA journal_mode = WAL","PRAGMA foreign_keys = ON","PRAGMA busy_timeout = 5000","PRAGMA wal_autocheckpoint = 1"];function h(j){for(let z of V)try{j.unsafe(z).execute().catch(()=>{})}catch{}}var U=new WeakSet;function W(){try{let j=H.getDatabase?.();if(!j||typeof j.run!=="function"||U.has(j))return;for(let z of V)try{j.run(z)}catch{}U.add(j)}catch{}}function F(j){H.configureOrm(j),W()}function B(j){let z=$(j);if(!j?.sql&&Z.dialect==="sqlite")h(z),W();return z}var N=new Map;function Q(j,z){let J=H.registerModel;if(typeof J==="function")return J(j,z);N.set(j,z);let K=typeof z?.getDefinition==="function"?z.getDefinition():z?.definition;if(K&&typeof K==="object")H.defineModel(K);return z}var k=/^[A-Z_][A-Z0-9_]*$/i;function C(j,z={}){if(typeof j!=="string"||j.length===0)return{valid:!1,reason:"empty"};if(j.length>64)return{valid:!1,reason:"too-long"};if(!k.test(j))return{valid:!1,reason:"invalid-shape"};if(z.allowlist&&!z.allowlist.includes(j))return{valid:!1,reason:"not-in-allowlist"};return{valid:!0}}function I(j,z={}){let J=C(j,z);if(J.valid)return;let K=z.context?` in ${z.context}`:"";throw Error(`[query-builder] Refusing to use ${JSON.stringify(j)} as a SQL identifier${K} \u2014 ${J.reason}`)}var X=new Set(["=","!=","<>","<","<=",">",">=","like","not like","ilike","not ilike","in","not in","is","is not","between","not between"]);function G(j){return typeof j==="string"&&X.has(j.toLowerCase())}function M(j,z){if(G(j))return;let J=z?` in ${z}`:"";throw Error(`[query-builder] Refusing to use ${JSON.stringify(j)} as a SQL operator${J} \u2014 not in the allowed set (${[...X].join(", ")})`)}Y({snapshotDir:"storage/framework/database"});export{C as validateIdentifier,w as saveMigrationSnapshot,Q as registerModel,G as isSafeOperator,B as createQueryBuilder,F as configureOrm,W as bootstrapModelExecutorPragmas,M as assertSafeOperator,I as assertSafeIdentifier,h as applySqlitePragmas,V as SQLITE_BOOTSTRAP_PRAGMAS,B as QueryBuilder};
|