{"version":3,"file":"nodejs.mjs","sources":["../../src/adapters/base-adapter.ts","../../node_modules/@dqcai/logger/lib/index.mjs","../../src/logger/index.ts","../../src/adapters/nodejs-adapter.ts"],"sourcesContent":["// src/adapters/base-adapter.ts\r\nimport { SQLiteAdapter, SQLiteConnection } from '@/types';\r\n\r\n\r\nexport abstract class BaseAdapter implements SQLiteAdapter {\r\n  abstract connect(path: string): Promise<SQLiteConnection>;\r\n  abstract isSupported(): Promise<boolean>;\r\n\r\n  protected sanitizeSQL(sql: string): string {\r\n    return sql.trim();\r\n  }\r\n\r\n  protected bindParameters(sql: string, params?: any[]): string {\r\n    if (!params || params.length === 0) {\r\n      return sql;\r\n    }\r\n\r\n    let paramIndex = 0;\r\n    return sql.replace(/\\?/g, () => {\r\n      if (paramIndex < params.length) {\r\n        const param = params[paramIndex++];\r\n        if (typeof param === 'string') {\r\n          return `'${param.replace(/'/g, \"''\")}'`;\r\n        }\r\n        if (param === null || param === undefined) {\r\n          return 'NULL';\r\n        }\r\n        return String(param);\r\n      }\r\n      return '?';\r\n    });\r\n  }\r\n}","const f=(...l)=>l.map(t=>{if(typeof t==\"bigint\")return t.toString();if(typeof t==\"object\"&&t!==null)try{return JSON.stringify(t,(e,i)=>typeof i==\"bigint\"?i.toString():i instanceof Date?i.toISOString():typeof Buffer!=\"undefined\"&&Buffer.isBuffer(i)?`<Buffer ${i.length} bytes>`:typeof i==\"function\"?`<Function ${i.name||\"anonymous\"}>`:i,2)}catch(e){return`<Error stringifying: ${e.message}>`}return String(t)}).join(\" \");class E{constructor(t){this.transports=new Map,this.transportFactory=null,this.config=t,this.sessionId=t.sessionId||this.generateSessionId()}generateSessionId(){return`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}getSessionId(){return this.sessionId}renewSession(){return this.sessionId=this.generateSessionId(),this.sessionId}setTransportFactory(t){this.transportFactory=t}addTransport(t){this.transports.set(t.name,t)}removeTransport(t){return this.transports.delete(t)}getTransport(t){return this.transports.get(t)}listTransports(){return Array.from(this.transports.keys())}setModuleConfig(t,e){this.config.modules[t]=e}getModuleConfig(t){return this.config.modules[t]}setGlobalEnabled(t){this.config.enabled=t}isGlobalEnabled(){return this.config.enabled}setDefaultLevel(t){this.config.defaultLevel=t}getConfig(){return JSON.parse(JSON.stringify(this.config))}setMetadata(t){this.config.metadata=Object.assign(Object.assign({},this.config.metadata),t)}shouldLog(t,e){if(!this.config.enabled)return!1;const i=this.config.modules[t];return i?i.enabled&&i.levels.includes(e):this.isLevelEnabled(e,this.config.defaultLevel)}isLevelEnabled(t,e){const i=[\"trace\",\"debug\",\"info\",\"warn\",\"error\"],s=i.indexOf(t),a=i.indexOf(e);return s===-1||a===-1?!1:s>=a}getTransportsForModule(t){const e=this.config.modules[t];return((e==null?void 0:e.transports)||[\"console\"]).map(i=>this.transports.get(i)).filter(i=>i!==void 0)}async sendToTransports(t,e){if(e.length===0)return;const i=e.map(async s=>{try{await s.log(t)}catch(a){console.error(`[UniversalLogger] Transport ${s.name} failed:`,a)}});await Promise.allSettled(i)}async log(t,e,i,s){if(!this.shouldLog(t,e))return;const a={timestamp:new Date().toISOString(),level:e,module:t,message:i,data:s,metadata:this.config.metadata,sessionId:this.sessionId},n=this.getTransportsForModule(t);await this.sendToTransports(a,n)}async trace(t,...e){const i=f(...e);await this.log(t,\"trace\",i)}async debug(t,...e){const i=f(...e);await this.log(t,\"debug\",i)}async info(t,...e){const i=f(...e);await this.log(t,\"info\",i)}async warn(t,...e){const i=f(...e);await this.log(t,\"warn\",i)}async error(t,...e){const i=f(...e);await this.log(t,\"error\",i)}async flush(){const t=Array.from(this.transports.values()).filter(e=>typeof e.flush==\"function\").map(e=>e.flush());await Promise.allSettled(t)}async cleanup(){const t=Array.from(this.transports.values()).filter(e=>typeof e.cleanup==\"function\").map(e=>e.cleanup());await Promise.allSettled(t)}createModuleLogger(t){return new F(t,this)}}class F{constructor(t,e){this.module=t,this.logger=e}async flush(){await this.logger.flush()}async trace(...t){const e=f(...t);await this.logger.trace(this.module,e)}async debug(...t){const e=f(...t);await this.logger.debug(this.module,e)}async info(...t){const e=f(...t);await this.logger.info(this.module,e)}async warn(...t){const e=f(...t);await this.logger.warn(this.module,e)}async error(...t){const e=f(...t);await this.logger.error(this.module,e)}getModuleName(){return this.module}}class b{constructor(t=!1){this.prefix=\"[InternalLogger]\",this.enabled=t}formatMessage(t,e,i){const s=new Date().toISOString(),a=i?` ${JSON.stringify(i)}`:\"\";return`${s} ${this.prefix} [${t}] ${e}${a}`}debug(t,e){this.enabled&&console.debug(this.formatMessage(\"DEBUG\",t,e))}info(t,e){this.enabled&&console.info(this.formatMessage(\"INFO\",t,e))}warn(t,e){this.enabled&&console.warn(this.formatMessage(\"WARN\",t,e))}error(t,e){if(this.enabled){const i=e instanceof Error?{message:e.message,stack:e.stack}:e;console.error(this.formatMessage(\"ERROR\",t,i))}}setEnabled(t){this.enabled=t}}class x{constructor(t){this.config=t,this.name=\"api\",this.buffer=[],this.timer=null,this.axios=null,this.endpoint=t.endpoint||\"/logs\",this.batchSize=t.batchSize||10,this.flushInterval=t.flushInterval||5e3,this.maxRetries=t.maxRetries||3,this.initAxios(),this.logger=new b(t.enableInternalLogging===!0)}cleanup(){throw new Error(\"Method not implemented.\")}async initAxios(){try{const t=await import(\"axios\");this.axios=t.default.create({baseURL:this.config.baseURL,timeout:1e4})}catch(t){this.logger.error(\"[ApiTransport] Kh\\xF4ng th\\u1EC3 load axios:\",t)}}async log(t){this.buffer.push(t),this.buffer.length>=this.batchSize?await this.flush():this.timer||(this.timer=setTimeout(()=>this.flush(),this.flushInterval))}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.buffer.length===0||!this.axios)return;const t=[...this.buffer];this.buffer=[],await this.sendWithRetry(t)}async sendWithRetry(t,e=1){try{await this.axios.post(this.endpoint,{logs:t})}catch(i){e<this.maxRetries?(await new Promise(s=>setTimeout(s,1e3*e)),await this.sendWithRetry(t,e+1)):this.logger.error(\"[ApiTransport] G\\u1EEDi log th\\u1EA5t b\\u1EA1i sau\",{max_retries:this.maxRetries,err:i})}}async destroy(){await this.flush()}}var $=Object.freeze({__proto__:null,ApiTransport:x});class S{constructor(t={}){this.name=\"console\",this.config=Object.assign({colorize:!0,timestamp:!0,prefix:\"\"},t)}log(t){const e=[];this.config.timestamp&&e.push(`[${t.timestamp}]`),this.config.prefix&&e.push(`[${this.config.prefix}]`),e.push(`[${t.module}]`,`[${t.level.toUpperCase()}]`,t.message);const i=e.join(\" \"),s=t.data?[t.data]:[];this.config.colorize?this.logWithColor(t.level,i,s):this.logWithoutColor(t.level,i,s)}logWithColor(t,e,i){const s={trace:\"#999999\",debug:\"#0066cc\",info:\"#00cc66\",warn:\"#ff9900\",error:\"#cc0000\"}[t];console.log(`%c${e}`,`color: ${s}`,...i)}logWithoutColor(t,e,i){switch(t){case\"error\":console.error(e,...i);break;case\"warn\":console.warn(e,...i);break;case\"info\":console.info(e,...i);break;default:console.log(e,...i)}}}var I=Object.freeze({__proto__:null,ConsoleTransport:S});class z{constructor(t={}){this.name=\"db\",this.initialized=!1,this.initializing=!1,this.initPromise=null,this.DatabaseManager=null,this.BaseService=null,this.loggerSchema=null,this.logService=null,this.errorLogService=null,this.statisticsService=null,this.sessionService=null,this.buffer=[],this.timer=null,this.currentSessionId=null,this.flushInProgress=Promise.resolve(),this.config=Object.assign({databaseType:\"sqlite\",database:\"logger\",dbDirectory:\"./logs\",tableName:\"logs\",batchSize:100,flushInterval:5e3,enableStatistics:!0,enableErrorTable:!0,enableInternalLogging:!0},t),this.batchSize=this.config.batchSize,this.flushInterval=this.config.flushInterval,this.logger=new b(this.config.enableInternalLogging),this.initDatabase()}async initDatabase(){return this.initialized||this.initializing?this.initPromise||Promise.resolve():(this.initializing=!0,this.initPromise=(async()=>{try{this.logger.debug(\"Initializing database transport...\");const t=await import(\"@dqcai/orm\");this.DatabaseManager=t.DatabaseManager,this.BaseService=t.BaseService,this.logger.debug(\"ORM module loaded successfully\");const e=await Promise.resolve().then(function(){return V});this.loggerSchema=e.loggerSchema;const i=e.LOGGER_SCHEMA_NAME;this.logger.debug(\"Logger schema loaded successfully\"),this.DatabaseManager.registerSchemas({[i]:this.loggerSchema}),this.logger.debug(\"Schema registered\");const s=this.buildDbConfig();await this.DatabaseManager.initializeSchema(i,{dbConfig:s,validateVersion:!1}),this.logger.info(\"Database initialized successfully\",{type:this.config.databaseType,database:this.config.database}),await this.initializeServices(i),this.initialized=!0,this.logger.info(\"DBTransport initialized successfully\")}catch(t){throw this.logger.error(\"Failed to initialize DBTransport\",t),t}finally{this.initializing=!1}})(),this.initPromise)}buildDbConfig(){const t={databaseType:this.config.databaseType,database:this.config.database};switch(this.config.databaseType){case\"sqlite\":t.dbDirectory=this.config.dbDirectory,this.config.filename&&(t.filename=this.config.filename),t.pragma={journal_mode:\"WAL\",synchronous:\"NORMAL\",foreign_keys:!0};break;case\"postgresql\":case\"mysql\":case\"mariadb\":this.config.connectionString?t.connectionString=this.config.connectionString:(t.host=this.config.host||\"localhost\",t.port=this.config.port,t.user=this.config.user,t.password=this.config.password);break}return t}async initializeServices(t){this.logger.debug(\"Initializing services...\");class e extends this.BaseService{constructor(){super(t,\"logs\")}}class i extends this.BaseService{constructor(){super(t,\"error_logs\")}}class s extends this.BaseService{constructor(){super(t,\"log_statistics\")}}class a extends this.BaseService{constructor(){super(t,\"log_sessions\")}}this.logService=new e,await this.logService.initialize(),this.config.enableErrorTable&&(this.errorLogService=new i,await this.errorLogService.initialize()),this.config.enableStatistics&&(this.statisticsService=new s,await this.statisticsService.initialize(),this.sessionService=new a,await this.sessionService.initialize()),this.logger.info(\"Services initialized successfully\")}async log(t){if(!this.initialized&&(await this.initDatabase(),!this.initialized)){this.logger.error(\"Cannot log: Transport not initialized\");return}this.buffer.push(t),this.buffer.length>=this.batchSize?await this.flush():this.timer||(this.timer=setTimeout(()=>this.flush(),this.flushInterval))}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.buffer.length===0)return;this.initialized||await this.initDatabase();const t=[...this.buffer];this.buffer=[];try{const e=t.map(i=>this.mapToLogRecord(i));if(await this.logService.bulkUpsert(e),this.config.enableErrorTable&&this.errorLogService){const i=t.filter(s=>s.level===\"error\").map(s=>this.mapToErrorRecord(s));i.length>0&&await this.errorLogService.bulkUpsert(i)}this.config.enableStatistics&&this.statisticsService&&await this.updateStatistics(t),this.logger.debug(`Successfully flushed ${t.length} logs to database`)}catch(e){this.buffer.unshift(...t),this.logger.error(\"Failed to flush logs to database\",{message:e.message,stack:e.stack,batchSize:t.length});const i=1e3+Math.random()*2e3;this.timer=setTimeout(()=>this.flush(),i)}}async updateStatistics(t){if(!this.statisticsService)return;const e=new Date().toISOString().split(\"T\")[0],i=new Map;for(const a of t){const n=`${a.module}:${a.level}`;i.set(n,(i.get(n)||0)+1)}const s=[];for(const[a,n]of i){const[o,h]=a.split(\":\"),c=await this.statisticsService.findOne({date:e,module:o,level:h});s.push({id:c==null?void 0:c.id,date:e,module:o,level:h,count:((c==null?void 0:c.count)||0)+n})}s.length>0&&await this.statisticsService.bulkUpsert(s,[\"date\",\"module\",\"level\"])}mapToLogRecord(t){const e=t.sessionId||this.currentSessionId||null;return e&&this.logger.debug(\"Mapping log with session_id\",{sessionId:e,message:t.message}),{timestamp:t.timestamp,level:t.level,module:t.module,message:t.message,data:t.data?JSON.stringify(t.data):null,metadata:t.metadata?JSON.stringify(t.metadata):null,session_id:e}}mapToErrorRecord(t){var e,i,s;return{timestamp:t.timestamp,module:t.module,message:t.message,stack_trace:((e=t.data)===null||e===void 0?void 0:e.stack)||((s=(i=t.data)===null||i===void 0?void 0:i.error)===null||s===void 0?void 0:s.stack)||String(t.data),data:t.data?JSON.stringify(t.data):null,metadata:t.metadata?JSON.stringify(t.metadata):null,session_id:t.sessionId||this.currentSessionId}}async startSession(t){if(this.initialized||await this.initDatabase(),this.currentSessionId=t||`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.config.enableStatistics&&this.sessionService)try{await this.sessionService.findOne({session_id:this.currentSessionId})||await this.sessionService.create({session_id:this.currentSessionId,started_at:new Date().toISOString(),status:\"active\"}),this.logger.info(\"Session started\",{sessionId:this.currentSessionId})}catch(e){this.logger.error(\"Failed to start session\",e)}return this.currentSessionId}async endSession(){if(!(!this.currentSessionId||!this.sessionService))try{await this.sessionService.update({session_id:this.currentSessionId},{ended_at:new Date().toISOString(),status:\"ended\"}),this.logger.info(\"Session ended\",{sessionId:this.currentSessionId}),this.currentSessionId=null}catch(t){this.logger.error(\"Failed to end session\",t)}}async queryLogs(t={},e={}){this.initialized||await this.initDatabase();try{return(await this.logService.find(t,Object.assign(Object.assign({},e),{orderBy:{timestamp:\"DESC\"}}))).map(i=>Object.assign(Object.assign({},i),{data:i.data?JSON.parse(i.data):null,metadata:i.metadata?JSON.parse(i.metadata):null}))}catch(i){return this.logger.error(\"Failed to query logs\",i),[]}}async getLogsByLevel(t,e=100){return this.queryLogs({level:t},{limit:e})}async getLogsByModule(t,e=100){return this.queryLogs({module:t},{limit:e})}async getLogsBySession(t,e=100){return this.queryLogs({session_id:t},{limit:e})}async getStatistics(t={}){if(!this.initialized||!this.statisticsService)return[];try{return await this.statisticsService.find(t,{orderBy:{date:\"DESC\"}})}catch(e){return this.logger.error(\"Failed to get statistics\",e),[]}}async clearOldLogs(t=30){if(!this.initialized)return 0;try{const e=new Date;e.setDate(e.getDate()-t);const i=e.toISOString(),s=await this.logService.delete({timestamp:{$lt:i}});return this.logger.info(`Cleared ${s.deletedCount} old logs`),s.deletedCount||0}catch(e){return this.logger.error(\"Failed to clear old logs\",e),0}}async getTransportStats(){if(!this.initialized)return null;try{const t=await this.logService.count(),e=await this.logService.count({level:\"error\"}),i={};for(const s of[\"trace\",\"debug\",\"info\",\"warn\",\"error\"])i[s]=await this.logService.count({level:s});return{totalLogs:t,errorCount:e,levelCounts:i,bufferSize:this.buffer.length,initialized:this.initialized,currentSession:this.currentSessionId}}catch(t){return this.logger.error(\"Failed to get transport stats\",t),null}}async cleanup(){this.logger.info(\"Cleaning up DBTransport...\"),await this.flush(),this.currentSessionId&&await this.endSession(),this.DatabaseManager&&await this.DatabaseManager.closeAll(),this.logger.info(\"DBTransport cleanup completed\")}setInternalLogging(t){this.logger.setEnabled(t)}}class T{constructor(t={}){this.name=\"electron-file\",this.fs=null,this.path=null,this.app=null,this.logPath=\"\",this.initialized=!1,this.fileName=t.fileName||\"app.log\",this.maxFileSize=t.maxFileSize||10*1024*1024,this.maxFiles=t.maxFiles||5,this.initElectron(),this.logger=new b(t.enableInternalLogging===!0)}async initElectron(){try{this.fs=await import(\"fs\").then(i=>i.promises),this.path=await import(\"path\");const t=await import(\"electron\");this.app=t.app,this.logPath=this.path.join(this.app.getPath(\"userData\"),\"logs\",this.fileName);const e=this.path.dirname(this.logPath);await this.fs.mkdir(e,{recursive:!0}),this.initialized=!0}catch(t){this.logger.error(\"[ElectronFileTransport] Kh\\xF4ng th\\u1EC3 kh\\u1EDFi t\\u1EA1o:\",t)}}async log(t){if(!(!this.initialized&&(await this.initElectron(),!this.initialized)))try{const e=JSON.stringify(t)+`\n`;try{(await this.fs.stat(this.logPath)).size>=this.maxFileSize&&await this.rotateFiles()}catch(i){}await this.fs.appendFile(this.logPath,e,\"utf8\")}catch(e){this.logger.error(\"[ElectronFileTransport] Ghi file th\\u1EA5t b\\u1EA1i:\",e)}}async rotateFiles(){try{const t=this.path.dirname(this.logPath),e=this.path.basename(this.logPath,\".log\"),i=this.path.join(t,`${e}.${this.maxFiles}.log`);try{await this.fs.unlink(i)}catch(a){}for(let a=this.maxFiles-1;a>=1;a--){const n=this.path.join(t,`${e}.${a}.log`),o=this.path.join(t,`${e}.${a+1}.log`);try{await this.fs.rename(n,o)}catch(h){}}const s=this.path.join(t,`${e}.1.log`);await this.fs.rename(this.logPath,s)}catch(t){this.logger.error(\"[ElectronFileTransport] Rotate files th\\u1EA5t b\\u1EA1i:\",t)}}async getLogs(){if(!this.initialized)return[];try{const t=[],e=this.path.dirname(this.logPath),i=this.path.basename(this.logPath,\".log\");try{const s=await this.fs.readFile(this.logPath,\"utf8\");t.push(s)}catch(s){}for(let s=1;s<=this.maxFiles;s++){const a=this.path.join(e,`${i}.${s}.log`);try{const n=await this.fs.readFile(a,\"utf8\");t.push(n)}catch(n){}}return t}catch(t){return this.logger.error(\"[ElectronFileTransport] \\u0110\\u1ECDc logs th\\u1EA5t b\\u1EA1i:\",t),[]}}async clearLogs(){if(this.initialized)try{const t=this.path.dirname(this.logPath),e=this.path.basename(this.logPath,\".log\");try{await this.fs.unlink(this.logPath)}catch(i){}for(let i=1;i<=this.maxFiles;i++){const s=this.path.join(t,`${e}.${i}.log`);try{await this.fs.unlink(s)}catch(a){}}}catch(t){this.logger.error(\"[ElectronFileTransport] X\\xF3a logs th\\u1EA5t b\\u1EA1i:\",t)}}}var A=Object.freeze({__proto__:null,ElectronFileTransport:T});class D{constructor(t={}){this.name=\"node-file\",this.fs=null,this.path=null,this.initialized=!1,this.initializing=!1,this.initPromise=null,this.rotating=!1,this.filePath=t.filePath||\"./logs/app.log\",this.maxFileSize=t.maxFileSize||10*1024*1024,this.maxFiles=t.maxFiles||5,this.logger=new b(t.enableInternalLogging===!0),this.initNodeFS()}async initNodeFS(){return this.initialized||this.initializing?this.initPromise||Promise.resolve():(this.initializing=!0,this.initPromise=(async()=>{try{this.logger.debug(\"Initializing Node.js file system modules...\"),this.fs=await import(\"fs\").then(i=>i.promises);const t=await import(\"fs\");this.path=await import(\"path\"),this.logger.debug(\"File system modules loaded successfully\");const e=this.path.dirname(this.filePath);t.existsSync(e)?this.logger.debug(\"Log directory already exists\",{path:e}):(this.logger.info(\"Creating log directory\",{path:e}),await this.fs.mkdir(e,{recursive:!0}),this.logger.info(\"Log directory created successfully\")),this.initialized=!0,this.logger.info(\"NodeFileTransport initialized successfully\",{filePath:this.filePath,maxFileSize:this.maxFileSize,maxFiles:this.maxFiles})}catch(t){throw this.logger.error(\"Failed to initialize NodeFileTransport\",t),t}finally{this.initializing=!1}})(),this.initPromise)}async log(t){if(!this.initialized&&(await this.initNodeFS(),!this.initialized)){this.logger.error(\"Cannot log: Transport not initialized\");return}try{const e=JSON.stringify(t)+`\n`;try{const i=await this.fs.stat(this.filePath);i.size>=this.maxFileSize&&(this.logger.info(\"File size limit reached, rotating files\",{currentSize:i.size,maxSize:this.maxFileSize}),await this.rotateFiles())}catch(i){this.logger.debug(\"Log file does not exist yet, will be created\")}await this.fs.appendFile(this.filePath,e,\"utf8\")}catch(e){this.logger.error(\"Failed to write log to file\",{filePath:this.filePath,error:e})}}async rotateFiles(){if(this.rotating){this.logger.debug(\"Rotation already in progress, skipping...\");return}this.rotating=!0;try{this.logger.debug(\"Starting file rotation...\");const t=this.path.dirname(this.filePath),e=this.path.extname(this.filePath),i=this.path.basename(this.filePath,e),s=this.path.join(t,`${i}.${this.maxFiles}${e}`);try{await this.fs.unlink(s),this.logger.debug(\"Deleted oldest log file\",{file:s})}catch(n){}for(let n=this.maxFiles-1;n>=1;n--){const o=this.path.join(t,`${i}.${n}${e}`),h=this.path.join(t,`${i}.${n+1}${e}`);try{await this.fs.rename(o,h)}catch(c){}}const a=this.path.join(t,`${i}.1${e}`);try{await this.fs.rename(this.filePath,a),this.logger.info(\"File rotation completed\",{currentFile:this.filePath,backupFile:a})}catch(n){n.code===\"ENOENT\"?this.logger.warn(\"Current log file disappeared during rotation (race condition avoided)\"):this.logger.error(\"File rotation failed\",n)}}catch(t){this.logger.error(\"Unexpected error during rotation\",t)}finally{this.rotating=!1}}async getLogs(){if(!this.initialized)return this.logger.warn(\"Cannot get logs: Transport not initialized\"),[];try{this.logger.debug(\"Reading log files...\");const t=[],e=this.path.dirname(this.filePath),i=this.path.extname(this.filePath),s=this.path.basename(this.filePath,i);try{const a=await this.fs.readFile(this.filePath,\"utf8\");t.push(a),this.logger.debug(\"Read current log file\",{file:this.filePath,size:a.length})}catch(a){this.logger.debug(\"Current log file does not exist\")}for(let a=1;a<=this.maxFiles;a++){const n=this.path.join(e,`${s}.${a}${i}`);try{const o=await this.fs.readFile(n,\"utf8\");t.push(o),this.logger.debug(\"Read backup log file\",{file:n,size:o.length})}catch(o){break}}return this.logger.info(\"Successfully read log files\",{totalFiles:t.length}),t}catch(t){return this.logger.error(\"Failed to read log files\",t),[]}}enableInternalLogging(t){this.logger.setEnabled(t)}async clearLogs(){if(!this.initialized){this.logger.warn(\"Cannot clear logs: Transport not initialized\");return}try{this.logger.info(\"Clearing all log files...\");const t=this.path.dirname(this.filePath),e=this.path.extname(this.filePath),i=this.path.basename(this.filePath,e);let s=0;try{await this.fs.unlink(this.filePath),s++,this.logger.debug(\"Deleted current log file\",{file:this.filePath})}catch(a){this.logger.debug(\"Current log file does not exist\")}for(let a=1;a<=this.maxFiles;a++){const n=this.path.join(t,`${i}.${a}${e}`);try{await this.fs.unlink(n),s++,this.logger.debug(\"Deleted backup log file\",{file:n})}catch(o){break}}this.logger.info(\"Successfully cleared log files\",{deletedFiles:s})}catch(t){this.logger.error(\"Failed to clear log files\",t)}}async flush(){this.logger.debug(\"Flush called (no-op for file transport)\")}async cleanup(){this.logger.info(\"Cleaning up NodeFileTransport...\"),this.logger.info(\"NodeFileTransport cleanup completed\")}async getStats(){const t={filePath:this.filePath,maxFileSize:this.maxFileSize,maxFiles:this.maxFiles,initialized:this.initialized};if(this.initialized){try{const i=await this.fs.stat(this.filePath);t.currentFileSize=i.size}catch(i){t.currentFileSize=0}const e=await this.getLogs();t.totalFiles=e.length}return t}setInternalLogging(t){this.logger.setEnabled(t),this.logger.info(`Internal logging ${t?\"enabled\":\"disabled\"}`)}}var P=Object.freeze({__proto__:null,NodeFileTransport:D});class N{constructor(t={}){this.name=\"rn-file\",this.RNFS=null,this.initialized=!1,this.fileName=t.fileName||\"app.log\",this.maxFileSize=t.maxFileSize||5*1024*1024,this.maxFiles=t.maxFiles||3,this.initRNFS(),this.logger=new b(t.enableInternalLogging===!0)}async initRNFS(){try{this.RNFS=(await import(\"react-native-fs\")).default,this.initialized=!0}catch(t){this.logger.error(\"[RNFileTransport] Kh\\xF4ng th\\u1EC3 load react-native-fs:\",t)}}async log(t){if(!((!this.initialized||!this.RNFS)&&(await this.initRNFS(),!this.RNFS)))try{const e=`${this.RNFS.DocumentDirectoryPath}/${this.fileName}`,i=JSON.stringify(t)+`\n`;await this.RNFS.exists(e)&&(await this.RNFS.stat(e)).size>=this.maxFileSize&&await this.rotateFiles(e),await this.RNFS.appendFile(e,i,\"utf8\")}catch(e){this.logger.error(\"[RNFileTransport] Ghi file th\\u1EA5t b\\u1EA1i:\",e)}}async rotateFiles(t){try{const e=`${this.RNFS.DocumentDirectoryPath}/${this.fileName}.${this.maxFiles}`;await this.RNFS.exists(e)&&await this.RNFS.unlink(e);for(let i=this.maxFiles-1;i>=1;i--){const s=`${this.RNFS.DocumentDirectoryPath}/${this.fileName}.${i}`,a=`${this.RNFS.DocumentDirectoryPath}/${this.fileName}.${i+1}`;await this.RNFS.exists(s)&&await this.RNFS.moveFile(s,a)}await this.RNFS.moveFile(t,`${this.RNFS.DocumentDirectoryPath}/${this.fileName}.1`)}catch(e){this.logger.error(\"[RNFileTransport] Rotate files th\\u1EA5t b\\u1EA1i:\",e)}}async getLogs(){if(!this.RNFS)return[];try{const t=[];for(let e=0;e<=this.maxFiles;e++){const i=e===0?this.fileName:`${this.fileName}.${e}`,s=`${this.RNFS.DocumentDirectoryPath}/${i}`;if(await this.RNFS.exists(s)){const a=await this.RNFS.readFile(s,\"utf8\");t.push(a)}}return t}catch(t){return this.logger.error(\"[RNFileTransport] \\u0110\\u1ECDc logs th\\u1EA5t b\\u1EA1i:\",t),[]}}async clearLogs(){if(this.RNFS)try{for(let t=0;t<=this.maxFiles;t++){const e=t===0?this.fileName:`${this.fileName}.${t}`,i=`${this.RNFS.DocumentDirectoryPath}/${e}`;await this.RNFS.exists(i)&&await this.RNFS.unlink(i)}}catch(t){this.logger.error(\"[RNFileTransport] X\\xF3a logs th\\u1EA5t b\\u1EA1i:\",t)}}}var O=Object.freeze({__proto__:null,RNFileTransport:N});class R{static detectPlatform(){var t,e;return typeof navigator!=\"undefined\"&&navigator.product===\"ReactNative\"?\"react-native\":typeof process!=\"undefined\"&&!((t=process.versions)===null||t===void 0)&&t.electron?\"electron\":typeof process!=\"undefined\"&&!((e=process.versions)===null||e===void 0)&&e.node&&typeof window==\"undefined\"?\"node\":\"web\"}static async createConsoleTransport(t){const{ConsoleTransport:e}=await Promise.resolve().then(function(){return I});return new e(t||{})}static async createApiTransport(t){const{ApiTransport:e}=await Promise.resolve().then(function(){return $});return new e(t)}static async createFileTransport(t,e){const i=t||this.detectPlatform();try{switch(i){case\"react-native\":{const{RNFileTransport:s}=await Promise.resolve().then(function(){return O});return new s(e||{})}case\"electron\":{const{ElectronFileTransport:s}=await Promise.resolve().then(function(){return A});return new s(e||{})}case\"node\":{const{NodeFileTransport:s}=await Promise.resolve().then(function(){return P});return new s(e||{})}case\"web\":return console.warn(\"[TransportFactory] File transport kh\\xF4ng kh\\u1EA3 d\\u1EE5ng tr\\xEAn web browser\"),null;default:return console.warn(\"[TransportFactory] Platform kh\\xF4ng \\u0111\\u01B0\\u1EE3c h\\u1ED7 tr\\u1EE3:\",i),null}}catch(s){return console.error(\"[TransportFactory] Kh\\xF4ng th\\u1EC3 t\\u1EA1o file transport:\",s),null}}static async createDefaultTransports(t){const e=[],i=this.detectPlatform();if(e.push(await this.createConsoleTransport(t==null?void 0:t.console)),t!=null&&t.api&&e.push(await this.createApiTransport(t.api)),i!==\"web\"){const s=await this.createFileTransport(i,t==null?void 0:t.file);s&&e.push(s)}return e}}const p=(...l)=>l.map(t=>typeof t==\"object\"?JSON.stringify(t,null,2):String(t)).join(\" \");class M{constructor(t,e){this.moduleName=t,this.logger=e.createModuleLogger(t),this.logger.info(`${t} initialized`).catch(i=>{console.error(`Failed to log initialization for ${t}:`,i)})}logTrace(...t){const e=p(...t);this.logger.trace(e).catch(i=>{console.error(`Failed to log trace [${this.moduleName}]:`,i)})}logDebug(...t){const e=p(...t);this.logger.debug(e).catch(i=>{console.error(`Failed to log debug [${this.moduleName}]:`,i)})}logInfo(...t){const e=p(...t);this.logger.info(e).catch(i=>{console.error(`Failed to log info [${this.moduleName}]:`,i)})}logWarn(...t){const e=p(...t);this.logger.warn(e).catch(i=>{console.error(`Failed to log warn [${this.moduleName}]:`,i)})}logError(...t){const e=p(...t);this.logger.error(e).catch(i=>{console.error(`Failed to log error [${this.moduleName}]:`,i)})}async logTraceAsync(...t){const e=p(...t);await this.logger.trace(e)}async logDebugAsync(...t){const e=p(...t);await this.logger.debug(e)}async logInfoAsync(...t){const e=p(...t);await this.logger.info(e)}async logWarnAsync(...t){const e=p(...t);await this.logger.warn(e)}async logErrorAsync(...t){const e=p(...t);await this.logger.error(e)}async flushLogs(){typeof this.logger.flush==\"function\"&&await this.logger.flush()}getModuleName(){return this.moduleName}}class y{constructor(){this.config={enabled:!0,defaultLevel:\"info\",modules:{}}}setEnabled(t){return this.config.enabled=t,this}setDefaultLevel(t){return this.config.defaultLevel=t,this}setSessionId(t){return this.config.sessionId=t,this}setMetadata(t){return this.config.metadata=t,this}addModule(t,e=!0,i=[\"info\",\"warn\",\"error\"],s=[\"console\"]){return this.config.modules[t]={enabled:e,levels:i,transports:s},this}addModules(t){return t.forEach(e=>{var i,s,a;this.addModule(e.name,(i=e.enabled)!==null&&i!==void 0?i:!0,(s=e.levels)!==null&&s!==void 0?s:[\"info\",\"warn\",\"error\"],(a=e.transports)!==null&&a!==void 0?a:[\"console\"])}),this}setModuleTransports(t,e){return this.config.modules[t]?this.config.modules[t].transports=e:this.config.modules[t]={enabled:!0,levels:[\"info\",\"warn\",\"error\"],transports:e},this}enableAllLevelsForModule(t){return this.config.modules[t]?this.config.modules[t].levels=[\"trace\",\"debug\",\"info\",\"warn\",\"error\"]:this.config.modules[t]={enabled:!0,levels:[\"trace\",\"debug\",\"info\",\"warn\",\"error\"],transports:[\"console\"]},this}useDevelopmentPreset(){return this.config.enabled=!0,this.config.defaultLevel=\"debug\",this}useProductionPreset(){return this.config.enabled=!0,this.config.defaultLevel=\"warn\",this}useTestingPreset(){return this.config.enabled=!0,this.config.defaultLevel=\"trace\",this}build(){return JSON.parse(JSON.stringify(this.config))}}class w{static createDevelopmentConfig(){return new y().setEnabled(!0).setDefaultLevel(\"debug\").addModule(\"DatabaseManager\",!0,[\"debug\",\"info\",\"warn\",\"error\"],[\"console\"]).addModule(\"ApiClient\",!0,[\"info\",\"warn\",\"error\"],[\"console\"]).addModule(\"Cache\",!0,[\"debug\",\"info\",\"warn\",\"error\"],[\"console\"]).build()}static createProductionConfig(){return new y().setEnabled(!0).setDefaultLevel(\"warn\").addModule(\"DatabaseManager\",!0,[\"error\"],[\"console\"]).addModule(\"ApiClient\",!0,[\"warn\",\"error\"],[\"console\"]).addModule(\"Cache\",!1,[],[]).build()}static createCustomConfig(t=!1){return t?w.createDevelopmentConfig():w.createProductionConfig()}}function j(l,t,e){const i=e.value;e.value=async function(...s){this.moduleName||this.constructor.name;const a=this.logger;if(a)try{await a.debug(`Calling method: ${t}`,{args:s.length,argTypes:s.map(o=>typeof o)});const n=Date.now();try{const o=await i.apply(this,s),h=Date.now()-n;return await a.debug(`Method ${t} completed in ${h}ms`),o}catch(o){const h=Date.now()-n;throw await a.error(`Method ${t} failed after ${h}ms`,{error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}}catch(n){return console.warn(`[LogMethod] Logging failed for ${t}:`,n),await i.apply(this,s)}else return await i.apply(this,s)}}function _(l=1e3){return function(t,e,i){const s=i.value;i.value=async function(...a){const n=Date.now();try{const o=await s.apply(this,a),h=Date.now()-n,c=this.logger;if(c&&h>l)try{await c.warn(`Slow method detected: ${e} took ${h}ms`,{threshold:l,duration:h,methodName:e,className:this.constructor.name,args:a.length,timestamp:new Date().toISOString()})}catch(d){console.warn(`[LogPerformance] Logging failed for ${e}:`,d)}return o}catch(o){const h=Date.now()-n,c=this.logger;if(c)try{await c.error(`Method ${e} failed after ${h}ms`,{threshold:l,duration:h,methodName:e,className:this.constructor.name,error:o instanceof Error?o.message:String(o)})}catch(d){console.warn(`[LogPerformance] Logging failed for ${e}:`,d)}throw o}}}}function L(l=\"debug\"){return function(t,e,i){const s=i.value;i.value=async function(...a){const n=this.logger,o=`${this.constructor.name}.${e}`;if(n){const h=Date.now();try{await n[l](`\\u2192 Entering ${o}`,{args:a.map((g,m)=>({index:m,type:typeof g,value:typeof g==\"object\"?\"[Object]\":String(g).slice(0,100)}))});const c=await s.apply(this,a),d=Date.now()-h;return await n[l](`\\u2190 Exiting ${o} (${d}ms)`,{duration:d,resultType:typeof c,hasResult:c!==void 0}),c}catch(c){const d=Date.now()-h;throw await n.error(`\\u2717 ${o} threw error (${d}ms)`,{duration:d,error:c instanceof Error?c.message:String(c)}),c}}else return await s.apply(this,a)}}}function k(l=6e4){const t=new Map;return function(e,i,s){const a=s.value;s.value=async function(...n){const o=`${this.constructor.name}.${i}.${JSON.stringify(n)}`,h=Date.now(),c=t.get(o),d=this.logger;if(c&&c.expires>h){if(d)try{await d.debug(`Cache HIT for ${i}`,{cacheKey:o})}catch(m){console.warn(\"[LogCache] Logging failed:\",m)}return c.value}if(d)try{await d.debug(`Cache MISS for ${i}`,{cacheKey:o})}catch(m){console.warn(\"[LogCache] Logging failed:\",m)}const g=await a.apply(this,n);return t.set(o,{value:g,expires:h+l}),g}}}function B(l=3,t=1e3){return function(e,i,s){const a=s.value;s.value=async function(...n){const o=this.logger;let h;for(let c=1;c<=l;c++)try{return o&&c>1&&await o.info(`Retry attempt ${c}/${l} for ${i}`),await a.apply(this,n)}catch(d){if(h=d,o)try{await o.warn(`Attempt ${c}/${l} failed for ${i}`,{attempt:c,maxRetries:l,error:d instanceof Error?d.message:String(d),willRetry:c<l})}catch(g){console.warn(\"[LogRetry] Logging failed:\",g)}if(c<l){const g=t*Math.pow(2,c-1);await new Promise(m=>setTimeout(m,g))}}if(o)try{await o.error(`All ${l} attempts failed for ${i}`,{maxRetries:l,finalError:h instanceof Error?h.message:String(h)})}catch(c){console.warn(\"[LogRetry] Final logging failed:\",c)}throw h}}}function q(l,t=\"debug\"){return function(e){return class extends e{constructor(...i){super(...i);const s=i.find(a=>a&&typeof a==\"object\"&&typeof a.createModuleLogger==\"function\");if(s&&!this.logger){const a=l||e.name;this.logger=s.createModuleLogger(a),this.moduleName=a}}}}}const v=(l,t)=>{const e=l||w.createDevelopmentConfig(),i=new E(e);return i.addTransport(new S),t&&t.length>0&&t.forEach(s=>{i.addTransport(s)}),i},G={APP:\"App\",CONFIG:\"Config\",AUTH:\"Auth\",API:\"API\",DATABASE:\"Database\",MIDDLEWARE:\"Middleware\",UTILS:\"Utils\",SECURITY:\"Security\",VALIDATION:\"Validation\",CACHE:\"Cache\",FILE_SYSTEM:\"FileSystem\",NETWORK:\"Network\",SCHEDULER:\"Scheduler\",ERROR_HANDLER:\"ErrorHandler\"};class J{constructor(t){this.moduleName=t}trace(t,...e){r.getInstance().trace(this.moduleName,t,...e)}debug(t,...e){r.getInstance().debug(this.moduleName,t,...e)}info(t,...e){r.getInstance().info(this.moduleName,t,...e)}warn(t,...e){r.getInstance().warn(this.moduleName,t,...e)}error(t,...e){r.getInstance().error(this.moduleName,t,...e)}}class r{static createDefaultConfig(){return new y().setEnabled(!0).setDefaultLevel(\"warn\").build()}static setTransports(t){r.customTransports=t,r.instance&&t.forEach(e=>{r.instance.addTransport(e)})}static addTransport(t){r.customTransports.push(t),r.instance&&r.instance.addTransport(t)}static removeTransport(t){return r.customTransports=r.customTransports.filter(e=>e.name!==t),r.instance?r.instance.removeTransport(t):!1}static listTransports(){return r.instance?r.instance.listTransports():r.customTransports.map(t=>t.name)}static initialize(t,e){if(r.isInitializing){for(;r.isInitializing;);return r.instance}if(r.instance&&!t&&!e)return r.instance;r.isInitializing=!0;const i=t||r.createDefaultConfig(),s=[...r.customTransports,...e||[]];return r.currentConfig=i,r.instance=v(i,s),r.isInitializing=!1,r.instance}static getInstance(){return r.instance?r.instance:r.initialize()}static updateConfiguration(t){const e=r.currentConfig;e&&e.enabled===t.enabled&&e.defaultLevel===t.defaultLevel&&JSON.stringify(e.modules)===JSON.stringify(t.modules)||(r.currentConfig=t,r.instance=v(t,r.customTransports))}static async flush(){r.instance&&await r.instance.flush()}static async cleanup(){r.instance&&await r.instance.cleanup()}static setEnabled(t){r.currentConfig&&(r.currentConfig.enabled=t,r.updateConfiguration(r.currentConfig))}static enableModule(t,e,i){r.currentConfig&&r.currentConfig.modules&&(r.currentConfig.modules[t]={enabled:!0,levels:e||[\"debug\",\"info\",\"warn\",\"error\"],transports:i||[\"console\"]},r.updateConfiguration(r.currentConfig))}static disableModule(t){r.currentConfig&&r.currentConfig.modules&&(r.currentConfig.modules[t]={enabled:!1,levels:[],transports:[]},r.updateConfiguration(r.currentConfig))}static createDebugConfig(){return new y().setEnabled(!0).setDefaultLevel(\"trace\").build()}static createProductionConfig(){return new y().setEnabled(!0).setDefaultLevel(\"warn\").build()}static reset(){return r.customTransports=[],r.initialize()}static getActiveProxyModules(){return Array.from(r.proxyInstances.keys())}static getCurrentConfig(){return r.currentConfig?Object.assign({},r.currentConfig):null}}r.instance=null,r.currentConfig=null,r.customTransports=[],r.isInitializing=!1,r.proxyInstances=new Map;const U=l=>{if(r.proxyInstances.has(l))return r.proxyInstances.get(l);const t=new J(l);return r.proxyInstances.set(l,t),t},u={id:{name:\"id\",type:\"integer\",primaryKey:!0,autoIncrement:!0,required:!0,description:\"ID t\\u1EF1 \\u0111\\u1ED9ng t\\u0103ng\"},timestamp:{name:\"timestamp\",type:\"timestamp\",required:!0,index:!0,description:\"Th\\u1EDDi gian log\"},level:{name:\"level\",type:\"varchar\",length:20,required:!0,index:!0,enum:[\"trace\",\"debug\",\"info\",\"warn\",\"error\"],description:\"M\\u1EE9c \\u0111\\u1ED9 log\"},module:{name:\"module\",type:\"varchar\",length:100,required:!0,index:!0,description:\"T\\xEAn module\"},message:{name:\"message\",type:\"text\",required:!0,description:\"N\\u1ED9i dung log\"},data:{name:\"data\",type:\"text\",nullable:!0,description:\"D\\u1EEF li\\u1EC7u b\\u1ED5 sung (JSON string)\"},metadata:{name:\"metadata\",type:\"text\",nullable:!0,description:\"Metadata (JSON string)\"},session_id:{name:\"session_id\",type:\"varchar\",length:100,nullable:!0,index:!0,description:\"Session ID\"},created_at:{name:\"created_at\",type:\"timestamp\",default:\"CURRENT_TIMESTAMP\",description:\"Th\\u1EDDi gian t\\u1EA1o b\\u1EA3n ghi\"}},W={version:\"1.0\",database_name:\"logger\",description:\"Database l\\u01B0u tr\\u1EEF logs c\\u1EE7a h\\u1EC7 th\\u1ED1ng\",schemas:{logs:{description:\"B\\u1EA3ng l\\u01B0u tr\\u1EEF t\\u1EA5t c\\u1EA3 logs\",cols:[Object.assign({},u.id),Object.assign({},u.timestamp),Object.assign({},u.level),Object.assign({},u.module),Object.assign({},u.message),Object.assign({},u.data),Object.assign({},u.metadata),Object.assign({},u.session_id),Object.assign({},u.created_at)],indexes:[{name:\"idx_logs_timestamp\",fields:[\"timestamp\"],description:\"Index cho timestamp \\u0111\\u1EC3 query nhanh\"},{name:\"idx_logs_level\",fields:[\"level\"],description:\"Index cho level\"},{name:\"idx_logs_module\",fields:[\"module\"],description:\"Index cho module\"},{name:\"idx_logs_session_id\",fields:[\"session_id\"],description:\"Index cho session_id\"},{name:\"idx_logs_level_module\",fields:[\"level\",\"module\"],description:\"Index composite cho level v\\xE0 module\"},{name:\"idx_logs_timestamp_level\",fields:[\"timestamp\",\"level\"],description:\"Index composite cho timestamp v\\xE0 level\"}]},error_logs:{description:\"B\\u1EA3ng l\\u01B0u tr\\u1EEF ri\\xEAng error logs\",cols:[Object.assign({},u.id),Object.assign({},u.timestamp),Object.assign({},u.module),Object.assign({},u.message),{name:\"stack_trace\",type:\"text\",nullable:!0,description:\"Stack trace c\\u1EE7a error\"},Object.assign({},u.data),Object.assign({},u.metadata),Object.assign({},u.session_id),Object.assign({},u.created_at)],indexes:[{name:\"idx_error_logs_timestamp\",fields:[\"timestamp\"],description:\"Index cho timestamp\"},{name:\"idx_error_logs_module\",fields:[\"module\"],description:\"Index cho module\"}]},log_statistics:{description:\"B\\u1EA3ng th\\u1ED1ng k\\xEA logs theo ng\\xE0y/module\",cols:[{name:\"id\",type:\"integer\",primaryKey:!0,autoIncrement:!0,required:!0},{name:\"date\",type:\"date\",required:!0,index:!0,description:\"Ng\\xE0y th\\u1ED1ng k\\xEA\"},Object.assign({},u.module),Object.assign({},u.level),{name:\"count\",type:\"integer\",required:!0,default:0,description:\"S\\u1ED1 l\\u01B0\\u1EE3ng logs\"},Object.assign({},u.created_at),{name:\"updated_at\",type:\"timestamp\",default:\"CURRENT_TIMESTAMP\",description:\"Th\\u1EDDi gian c\\u1EADp nh\\u1EADt\"}],indexes:[{name:\"idx_stats_date_module_level\",fields:[\"date\",\"module\",\"level\"],unique:!0,description:\"Index unique composite\"}]},log_sessions:{description:\"B\\u1EA3ng qu\\u1EA3n l\\xFD sessions\",cols:[{name:\"id\",type:\"integer\",primaryKey:!0,autoIncrement:!0,required:!0},Object.assign({},u.session_id),{name:\"started_at\",type:\"timestamp\",required:!0,description:\"Th\\u1EDDi gian b\\u1EAFt \\u0111\\u1EA7u session\"},{name:\"ended_at\",type:\"timestamp\",nullable:!0,description:\"Th\\u1EDDi gian k\\u1EBFt th\\xFAc session\"},{name:\"total_logs\",type:\"integer\",default:0,description:\"T\\u1ED5ng s\\u1ED1 logs trong session\"},{name:\"error_count\",type:\"integer\",default:0,description:\"S\\u1ED1 l\\u01B0\\u1EE3ng errors\"},{name:\"status\",type:\"varchar\",length:20,default:\"active\",enum:[\"active\",\"ended\",\"expired\"],description:\"Tr\\u1EA1ng th\\xE1i session\"},Object.assign({},u.created_at)],indexes:[{name:\"idx_sessions_session_id\",fields:[\"session_id\"],unique:!0,description:\"Index unique cho session_id\"},{name:\"idx_sessions_status\",fields:[\"status\"],description:\"Index cho status\"}]}}},K=\"logger\",H={LOGS:\"logs\",ERROR_LOGS:\"error_logs\",LOG_STATISTICS:\"log_statistics\",LOG_SESSIONS:\"log_sessions\"};var V=Object.freeze({__proto__:null,LOGGER_SCHEMA_NAME:K,LOGGER_TABLES:H,loggerSchema:W});export{x as ApiTransport,M as BaseModule,r as CommonLoggerConfig,G as CommonModules,S as ConsoleTransport,z as DBTransport,T as ElectronFileTransport,q as EnableLogging,k as LogCache,j as LogMethod,L as LogMethodFlow,_ as LogPerformance,B as LogRetry,y as LoggerConfigBuilder,w as LoggerUtils,F as ModuleLogger,D as NodeFileTransport,N as RNFileTransport,R as TransportFactory,E as UniversalLogger,v as createLogger,U as createModuleLogger};\n//# sourceMappingURL=index.mjs.map\n","// in @dqcai/sqlite library\r\n// ./src/logger/index.ts\r\n\r\nimport {\r\n  BaseModule,\r\n  LoggerConfigBuilder,\r\n  CommonModules,\r\n  CommonLoggerConfig,\r\n  createModuleLogger,\r\n} from \"@dqcai/logger\";\r\n\r\nconst SQLiteModules = {\r\n  ...CommonModules,\r\n  DATABASE_MANAGER: \"DatabaseManager\",\r\n  DATABASE_FACTORY: \"DatabaseFactory\",\r\n  UNIVERSAL_DAO: \"UniversalDAO\",\r\n  BASE_SERVICE: \"BaseService\",\r\n  SERVICE_MANAGER: \"ServiceManager\",\r\n  QUERY_BUILDER: \"QueryBuilder\",\r\n  BASE_ADAPTER: \"BaseAdapter\",\r\n  NODEJS_ADAPTER: \"NodeJSAdapter\",\r\n  REACTNATIVE_ADAPTER: \"RN-Adapter\",\r\n  UNIVERSAL_SQLITE: \"UniversalSQLite\",\r\n  TRANSACTION: \"Transaction\",\r\n  CONNECTION: \"Connection\",\r\n};\r\n\r\n\r\n// ✅ Helper function để config logger\r\nexport function configureSQLiteLogger(\r\n  enabled: boolean = true,\r\n  defaultLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' = 'warn'\r\n) {\r\n  // console.log(`🔧 [SQLite] Configuring logger: enabled=${enabled}, level=${defaultLevel}`);\r\n  \r\n  const config = new LoggerConfigBuilder()\r\n    .setEnabled(enabled)\r\n    .setDefaultLevel(defaultLevel)\r\n    .build();\r\n    \r\n  CommonLoggerConfig.updateConfiguration(config);\r\n  \r\n  // console.log(\"✅ [SQLite] Logger configured:\", CommonLoggerConfig.getCurrentConfig());\r\n}\r\n\r\n// khởi tạo default config cho thư viện\r\nconfigureSQLiteLogger(true, 'warn');\r\n\r\n// ✅ Export utilities only\r\nexport { BaseModule, createModuleLogger, SQLiteModules, CommonLoggerConfig };","/* eslint-disable quotes */\r\n// ./src/adapters/nodejs-adapter.ts\r\nimport { BaseAdapter } from \"./base-adapter\";\r\n\r\nimport { createModuleLogger, SQLiteModules } from \"@/logger\";\r\nconst logger = createModuleLogger(SQLiteModules.NODEJS_ADAPTER);\r\n\r\n// Định nghĩa types để tránh lỗi TypeScript\r\ntype BetterSqlite3Database = any;\r\ntype BetterSqlite3Constructor = any;\r\n\r\nexport class NodeJSAdapter extends BaseAdapter {\r\n  private Database: BetterSqlite3Constructor | null = null;\r\n\r\n  async isSupported(): Promise<boolean> {\r\n    try {\r\n      // Kiểm tra xem có đang chạy trong môi trường Node.js không\r\n      return (\r\n        typeof process !== \"undefined\" &&\r\n        process.versions != null &&\r\n        process.versions.node != null\r\n      );\r\n    } catch (error) {\r\n      logger.debug(\"Node.js environment not detected\", error);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  private async loadBetterSqlite3(): Promise<BetterSqlite3Constructor> {\r\n    if (this.Database) {\r\n      return this.Database;\r\n    }\r\n\r\n    try {\r\n      // Dynamic import better-sqlite3 module\r\n      const BetterSqlite3 = (await import(\"better-sqlite3\")).default;\r\n\r\n      this.Database = BetterSqlite3;\r\n      return BetterSqlite3;\r\n    } catch (error) {\r\n      logger.error(\"Failed to load better-sqlite3\", error);\r\n      throw new Error(\"better-sqlite3 is not available in this environment\");\r\n    }\r\n  }\r\n\r\n  async connect(dbPath: string): Promise<any> {\r\n    logger.trace(`Connecting to database: ${dbPath}`);\r\n    try {\r\n      // Kiểm tra môi trường trước\r\n      const supported = await this.isSupported();\r\n      if (!supported) {\r\n        throw new Error(\"Node.js environment is not supported\");\r\n      }\r\n\r\n      // Load better-sqlite3 module động\r\n      const Database = await this.loadBetterSqlite3();\r\n\r\n      // Tạo kết nối đến database\r\n      const database = new Database(dbPath, {\r\n        // verbose: console.log, // Uncomment để debug\r\n      });\r\n\r\n      // Cấu hình pragma cho hiệu suất tốt hơn\r\n      database.pragma(\"journal_mode = WAL\");\r\n      database.pragma(\"synchronous = NORMAL\");\r\n\r\n      logger.debug(`Connected to database: ${dbPath}`, database);\r\n\r\n      return new NodeJSConnection(database);\r\n    } catch (error) {\r\n      logger.error(`Failed to connect to database: ${dbPath}`, error);\r\n      throw new Error(`Failed to connect to database: ${error}`);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Convert params để tương thích với better-sqlite3\r\n */\r\nconst normalizeParams = (params: any[]): any[] => {\r\n  return params.map((param) => {\r\n    // Convert boolean → number\r\n    if (typeof param === \"boolean\") {\r\n      return param ? 1 : 0;\r\n    }\r\n\r\n    // Convert undefined → null\r\n    if (param === undefined) {\r\n      return null;\r\n    }\r\n\r\n    // Convert Date → ISO string\r\n    if (param instanceof Date) {\r\n      return param.toISOString();\r\n    }\r\n\r\n    // Reject objects/arrays\r\n    if (typeof param === \"object\" && param !== null) {\r\n      throw new Error(`Cannot bind object/array: ${JSON.stringify(param)}`);\r\n    }\r\n\r\n    return param;\r\n  });\r\n};\r\n\r\nclass NodeJSConnection {\r\n  constructor(private db: BetterSqlite3Database) {}\r\n\r\n  /**\r\n   * Phân loại loại SQL query\r\n   */\r\n  private getQueryType(sql: string): \"SELECT\" | \"PRAGMA\" | \"MODIFY\" {\r\n    const normalizedSql = sql.trim().toUpperCase();\r\n\r\n    if (normalizedSql.startsWith(\"SELECT\")) {\r\n      return \"SELECT\";\r\n    }\r\n\r\n    if (normalizedSql.startsWith(\"PRAGMA\")) {\r\n      return \"PRAGMA\";\r\n    }\r\n\r\n    // INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, etc.\r\n    return \"MODIFY\";\r\n  }\r\n\r\n  async execute(sql: string, params: any[] = []): Promise<any> {\r\n    logger.debug(`NodeJSConnection.execute() sql:`, sql);\r\n    logger.debug(`NodeJSConnection.execute() params:`, params);\r\n\r\n    try {\r\n      // ✅ Normalize params trước khi execute\r\n      const normalizedParams = normalizeParams(params);\r\n      logger.debug(`Normalized params:`, normalizedParams);\r\n\r\n      const queryType = this.getQueryType(sql);\r\n      const stmt = this.db.prepare(sql);\r\n\r\n      switch (queryType) {\r\n        case \"SELECT\": {\r\n          // ✅ Xử lý câu lệnh SELECT\r\n          const rows = stmt.all(...normalizedParams);\r\n          logger.debug(`SQL SELECT result:`, rows);\r\n\r\n          return {\r\n            rows: rows || [],\r\n            rowsAffected: 0,\r\n          };\r\n        }\r\n\r\n        case \"PRAGMA\": {\r\n          // ✅ ĐÚNG - Phân biệt PRAGMA có trả về dữ liệu hay không\r\n          try {\r\n            // Thử get() trước cho PRAGMA trả về 1 dòng, hoặc all() cho nhiều dòng\r\n            const rows = stmt.all(...normalizedParams);\r\n            logger.debug(`PRAGMA result:`, rows);\r\n\r\n            return {\r\n              rows: rows || [],\r\n              rowsAffected: 0,\r\n              lastInsertRowId: 0,\r\n            };\r\n          } catch (pragmaError) {\r\n            // Nếu lỗi \"does not return data\", dùng run()\r\n            if (\r\n              (pragmaError as any).message?.includes(\"does not return data\")\r\n            ) {\r\n              const result = stmt.run(...normalizedParams);\r\n              logger.debug(`PRAGMA execution result:`, result);\r\n\r\n              return {\r\n                rows: [],\r\n                rowsAffected: 0,\r\n                lastInsertRowId: 0,\r\n              };\r\n            }\r\n            throw pragmaError;\r\n          }\r\n        }\r\n\r\n        case \"MODIFY\":\r\n        default: {\r\n          // ✅ Xử lý các câu lệnh INSERT, UPDATE, DELETE, CREATE, etc.\r\n          const result = stmt.run(...normalizedParams);\r\n          logger.debug(`SQL execution result:`, {\r\n            changes: result.changes,\r\n            lastInsertRowid: result.lastInsertRowid,\r\n          });\r\n\r\n          return {\r\n            rows: [],\r\n            rowsAffected: result.changes || 0,\r\n            lastInsertRowId: result.lastInsertRowid || undefined,\r\n          };\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // ✅ CHỈ log khi KHÔNG phải lỗi _schema_info\r\n      if (\r\n        !(error as any).message ||\r\n        (error as any).message.indexOf(\"_schema_info\") === -1\r\n      ) {\r\n        logger.error(`SQL execution failed`, {\r\n          code: (error as any).code,\r\n          message: (error as any).message,\r\n        });\r\n      }\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  async close(): Promise<void> {\r\n    try {\r\n      this.db.close();\r\n      logger.debug(\"Database connection closed\");\r\n    } catch (error) {\r\n      logger.error(`Close Error:`, error);\r\n      throw error;\r\n    }\r\n  }\r\n\r\n  // Phương thức bổ sung để thực hiện transaction\r\n  async transaction(fn: (tx: any) => Promise<void>): Promise<void> {\r\n    const transaction = this.db.transaction(async () => {\r\n      await fn(new NodeJSTransaction(this.db));\r\n    });\r\n\r\n    try {\r\n      transaction();\r\n      logger.debug(\"Transaction completed successfully\");\r\n    } catch (error) {\r\n      logger.error(\"Transaction failed\", error);\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n\r\n// Class hỗ trợ cho transaction\r\nclass NodeJSTransaction {\r\n  constructor(private db: BetterSqlite3Database) {}\r\n\r\n  /**\r\n   * Phân loại loại SQL query\r\n   */\r\n  private getQueryType(sql: string): \"SELECT\" | \"PRAGMA\" | \"MODIFY\" {\r\n    const normalizedSql = sql.trim().toUpperCase();\r\n\r\n    if (normalizedSql.startsWith(\"SELECT\")) {\r\n      return \"SELECT\";\r\n    }\r\n\r\n    if (normalizedSql.startsWith(\"PRAGMA\")) {\r\n      return \"PRAGMA\";\r\n    }\r\n\r\n    return \"MODIFY\";\r\n  }\r\n\r\n  async executeSql(sql: string, params: any[] = []): Promise<any> {\r\n    try {\r\n      // ✅ Normalize params trước khi execute\r\n      const normalizedParams = normalizeParams(params);\r\n      logger.debug(`Normalized params:`, normalizedParams);\r\n\r\n      const queryType = this.getQueryType(sql);\r\n      const stmt = this.db.prepare(sql);\r\n\r\n      switch (queryType) {\r\n        case \"SELECT\": {\r\n          const rows = stmt.all(...normalizedParams);\r\n          return {\r\n            rows: rows || [],\r\n            rowsAffected: 0,\r\n          };\r\n        }\r\n\r\n        case \"PRAGMA\": {\r\n          // ✅ ĐÚNG - Áp dụng logic tương tự\r\n          try {\r\n            const rows = stmt.all(...normalizedParams);\r\n            return {\r\n              rows: rows || [],\r\n              rowsAffected: 0,\r\n              lastInsertRowId: 0,\r\n            };\r\n          } catch (pragmaError) {\r\n            if (\r\n              (pragmaError as any).message?.includes(\"does not return data\")\r\n            ) {\r\n              const result = stmt.run(...normalizedParams);\r\n              return {\r\n                rows: [],\r\n                rowsAffected: 0,\r\n                lastInsertRowId: 0,\r\n              };\r\n            }\r\n            throw pragmaError;\r\n          }\r\n        }\r\n\r\n        case \"MODIFY\":\r\n        default: {\r\n          const result = stmt.run(...normalizedParams);\r\n          return {\r\n            rows: [],\r\n            rowsAffected: result.changes || 0,\r\n            lastInsertRowId: result.lastInsertRowid || undefined,\r\n          };\r\n        }\r\n      }\r\n    } catch (error) {\r\n      logger.error(\"Transaction SQL execution failed\", error);\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n"],"names":["BaseAdapter","sql","params","paramIndex","param","f","l","t","e","i","E","s","a","n","F","S","y","w","v","G","J","r","U","u","SQLiteModules","CommonModules","configureSQLiteLogger","enabled","defaultLevel","config","LoggerConfigBuilder","CommonLoggerConfig","logger","createModuleLogger","NodeJSAdapter","error","BetterSqlite3","dbPath","Database","database","NodeJSConnection","normalizeParams","db","normalizedSql","normalizedParams","queryType","stmt","rows","pragmaError","_a","result","fn","transaction","NodeJSTransaction"],"mappings":"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","x_google_ignoreList":[1]}