@junkawasaki/kawadb-orm
Version:
TypeScript ORM for KawaDB with KSQL support - works in Web and Electron environments
1 lines • 37.5 kB
JavaScript
import*as __WEBPACK_EXTERNAL_MODULE_eventemitter3__ from"eventemitter3";var __webpack_modules__={28:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StreamBuilder=void 0;const s=r(105);class n{constructor(){this.stream={}}name(e){return this.stream.name=e,this}addColumn(e,t,r=!0){return this.stream.columns||(this.stream.columns=[]),this.stream.columns.push({name:e,type:t,nullable:r}),this}columns(e){return this.stream.columns=e,this}topic(e){return this.stream.topic=e,this}format(e){return this.stream.format=e,this}partitionBy(e){return this.stream.partitionBy=e,this}window(e){return this.stream.window=e,this}tumblingWindow(e,t){return this.stream.window={type:"tumbling",size:e,unit:t},this}hoppingWindow(e,t,r){return this.stream.window={type:"hopping",size:e,advance:t,unit:r},this}sessionWindow(e,t){return this.stream.window={type:"session",size:e,unit:t},this}build(){if(!this.stream.name)throw new Error("Stream name is required");if(!this.stream.columns||0===this.stream.columns.length)throw new Error("Stream must have at least one column");if(!this.stream.topic)throw new Error("Kafka topic is required");return this.stream.format||(this.stream.format=s.KsqlDataFormat.JSON),this.stream}toSQL(){const e=this.build(),t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let r=`CREATE STREAM ${e.name} (${t}) WITH (`;return r+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,e.partitionBy&&(r+=`, PARTITIONS=${e.partitionBy}`),r+=")",r}reset(){return this.stream={},this}clone(){const e=new n;return e.stream=JSON.parse(JSON.stringify(this.stream)),e}stringColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.STRING,t)}integerColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.INTEGER,t)}bigintColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.BIGINT,t)}doubleColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.DOUBLE,t)}booleanColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.BOOLEAN,t)}timestampColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.TIMESTAMP,t)}arrayColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.ARRAY,t)}mapColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.MAP,t)}structColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.STRUCT,t)}}t.StreamBuilder=n},105:(e,t)=>{var r,s,n,i;Object.defineProperty(t,"__esModule",{value:!0}),t.QueryStatus=t.KsqlDataFormat=t.KsqlDataType=t.KsqlQueryType=void 0,function(e){e.CREATE_STREAM="CREATE_STREAM",e.CREATE_TABLE="CREATE_TABLE",e.DROP_STREAM="DROP_STREAM",e.DROP_TABLE="DROP_TABLE",e.SELECT="SELECT",e.INSERT="INSERT",e.SHOW_STREAMS="SHOW_STREAMS",e.SHOW_TABLES="SHOW_TABLES",e.DESCRIBE="DESCRIBE"}(r||(t.KsqlQueryType=r={})),function(e){e.STRING="STRING",e.INTEGER="INTEGER",e.BIGINT="BIGINT",e.DOUBLE="DOUBLE",e.BOOLEAN="BOOLEAN",e.ARRAY="ARRAY",e.MAP="MAP",e.STRUCT="STRUCT",e.TIMESTAMP="TIMESTAMP",e.DATE="DATE",e.TIME="TIME"}(s||(t.KsqlDataType=s={})),function(e){e.JSON="JSON",e.AVRO="AVRO",e.PROTOBUF="PROTOBUF",e.DELIMITED="DELIMITED"}(n||(t.KsqlDataFormat=n={})),function(e){e.RUNNING="RUNNING",e.STOPPED="STOPPED",e.ERROR="ERROR",e.PAUSED="PAUSED"}(i||(t.QueryStatus=i={}))},158:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Table=function(e){return function(t){const r=(0,s.getEntityMetadata)(t);return r&&(r.tableName=e),t}};const s=r(707)},169:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.Logger=t.LogLevel=void 0,function(e){e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e[e.TRACE=4]="TRACE"}(r||(t.LogLevel=r={})),t.Logger=class{constructor(e=!1,t="KawaORM"){this.entries=[],this.maxEntries=1e3,this.level=e?r.DEBUG:r.INFO,this.prefix=t}setLevel(e){this.level=e}error(e,t){this.log(r.ERROR,e,t)}warn(e,t){this.log(r.WARN,e,t)}info(e,t){this.log(r.INFO,e,t)}debug(e,t){this.log(r.DEBUG,e,t)}trace(e,t){this.log(r.TRACE,e,t)}log(e,t,s){if(e>this.level)return;const n={level:e,message:t,timestamp:new Date,data:s,stack:e===r.ERROR?(new Error).stack:void 0};this.entries.push(n),this.entries.length>this.maxEntries&&this.entries.shift(),this.outputToConsole(n)}outputToConsole(e){const t=e.timestamp.toISOString(),s=r[e.level],n=`[${t}] [${this.prefix}] [${s}] ${e.message}`;switch(e.level){case r.ERROR:console.error(n,e.data||"",e.stack||"");break;case r.WARN:console.warn(n,e.data||"");break;case r.INFO:console.info(n,e.data||"");break;case r.DEBUG:case r.TRACE:console.debug(n,e.data||"")}}getLogs(e){return void 0!==e?this.entries.filter(t=>t.level===e):[...this.entries]}clearLogs(){this.entries=[]}}},191:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=191,e.exports=t},208:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TableBuilder=void 0;const s=r(105);class n{constructor(){this.table={}}name(e){return this.table.name=e,this}addColumn(e,t,r=!0){return this.table.columns||(this.table.columns=[]),this.table.columns.push({name:e,type:t,nullable:r}),this}columns(e){return this.table.columns=e,this}topic(e){return this.table.topic=e,this}format(e){return this.table.format=e,this}primaryKey(...e){return this.table.primaryKey=e,this}window(e){return this.table.window=e,this}tumblingWindow(e,t){return this.table.window={type:"tumbling",size:e,unit:t},this}hoppingWindow(e,t,r){return this.table.window={type:"hopping",size:e,advance:t,unit:r},this}sessionWindow(e,t){return this.table.window={type:"session",size:e,unit:t},this}build(){if(!this.table.name)throw new Error("Table name is required");if(!this.table.columns||0===this.table.columns.length)throw new Error("Table must have at least one column");if(!this.table.topic)throw new Error("Kafka topic is required");if(this.table.format||(this.table.format=s.KsqlDataFormat.JSON),!this.table.primaryKey||0===this.table.primaryKey.length)throw new Error("Table must have at least one primary key");return this.table}toSQL(){const e=this.build(),t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let r=`CREATE TABLE ${e.name} (${t}) WITH (`;return r+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,r+=`, KEY='${e.primaryKey.join(",")}'`,r+=")",r}reset(){return this.table={},this}clone(){const e=new n;return e.table=JSON.parse(JSON.stringify(this.table)),e}stringColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.STRING,t)}integerColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.INTEGER,t)}bigintColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.BIGINT,t)}doubleColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.DOUBLE,t)}booleanColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.BOOLEAN,t)}timestampColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.TIMESTAMP,t)}arrayColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.ARRAY,t)}mapColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.MAP,t)}structColumn(e,t=!0){return this.addColumn(e,s.KsqlDataType.STRUCT,t)}singlePrimaryKey(e){return this.primaryKey(e)}compositePrimaryKey(...e){return this.primaryKey(...e)}}t.TableBuilder=n},272:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Entity=void 0,t.Entity=class{constructor(){this.createdAt=new Date,this.updatedAt=new Date}hasId(){return void 0!==this.id&&null!==this.id}markAsUpdated(){this.updatedAt=new Date}toJSON(){const e={};return Object.keys(this).forEach(t=>{const r=this[t];void 0!==r&&(e[t]=r)}),e}static fromJSON(e){const t=new this;return Object.keys(e).forEach(r=>{void 0!==e[r]&&(t[r]=e[r])}),e.createdAt&&(t.createdAt=new Date(e.createdAt)),e.updatedAt&&(t.updatedAt=new Date(e.updatedAt)),t}clone(){const e=new(0,this.constructor);return Object.keys(this).forEach(t=>{const r=this[t];void 0!==r&&(r instanceof Date?e[t]=new Date(r):e[t]="object"==typeof r&&null!==r?JSON.parse(JSON.stringify(r)):r)}),e}equals(e){return!(!this.hasId()||!e.hasId())&&this.id===e.id}hashCode(){return this.hasId()?String(this.id):btoa(JSON.stringify(this.toJSON())).substring(0,16)}}},345:e=>{e.exports=__WEBPACK_EXTERNAL_MODULE_eventemitter3__},371:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},460:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Schema=void 0;const s=r(913);class n{constructor(){this.tables=new Map}addTable(e){this.tables.set(e.name,e)}getTable(e){return this.tables.get(e)}getAllTables(){return Array.from(this.tables.values())}hasTable(e){return this.tables.has(e)}dropTable(e){return this.tables.delete(e)}generateCreateTableSQL(e){const t=this.getTable(e);if(!t)throw new Error(`Table ${e} not found`);const r=t.columns.map(e=>this.formatColumnDefinition(e)),s=t.primaryKey.length>0?`, PRIMARY KEY (${t.primaryKey.join(", ")})`:"";return`CREATE TABLE ${e} (\n ${r.join(",\n ")}${s}\n)`}formatColumnDefinition(e){let t=`${e.name} ${this.mapDataTypeToSQL(e.type)}`;return e.nullable||(t+=" NOT NULL"),void 0!==e.defaultValue&&(t+=` DEFAULT ${this.formatDefaultValue(e.defaultValue)}`),e.unique&&(t+=" UNIQUE"),e.autoIncrement&&(t+=" AUTO_INCREMENT"),t}mapDataTypeToSQL(e){switch(e){case s.DataType.STRING:return"VARCHAR(255)";case s.DataType.NUMBER:return"DECIMAL(10,2)";case s.DataType.BOOLEAN:return"BOOLEAN";case s.DataType.DATE:return"TIMESTAMP";case s.DataType.JSON:case s.DataType.ARRAY:case s.DataType.OBJECT:return"JSON";default:return"VARCHAR(255)"}}formatDefaultValue(e){return null===e?"NULL":"string"==typeof e?`'${e}'`:"boolean"==typeof e?e?"TRUE":"FALSE":String(e)}toJSON(){const e={};for(const[t,r]of this.tables)e[t]={name:r.name,columns:r.columns,primaryKey:r.primaryKey,indexes:r.indexes};return{tables:e}}static fromJSON(e){const t=new n;if(e.tables)for(const[r,s]of Object.entries(e.tables)){const e=s,r={name:e.name,columns:e.columns||[],primaryKey:e.primaryKey||[],indexes:e.indexes||[]};t.addTable(r)}return t}clear(){this.tables.clear()}getStats(){const e=this.getAllTables(),t=e.reduce((e,t)=>e+t.columns.length,0),r=e.reduce((e,t)=>e+t.indexes.length,0);return{tableCount:e.length,columnCount:t,indexCount:r,tables:e.map(e=>({name:e.name,columnCount:e.columns.length,indexCount:e.indexes.length,hasPrimaryKey:e.primaryKey.length>0}))}}}t.Schema=n},463:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Connection=void 0,t.Connection=class{constructor(e,t,r){this.wasmModule=null,this.kawaBrowserDB=null,this.connected=!1,this.wasmLoader=e,this.config=t,this.logger=r}async connect(e={}){if(!this.connected)try{this.wasmModule=this.wasmLoader.getModule();const e=new this.wasmModule.BrowserDBConfig;this.configureBrowserDB(e),this.kawaBrowserDB=new this.wasmModule.KawaBrowserDB(e),this.connected=!0,this.logger.info("Connected to KawaDB")}catch(e){throw this.logger.error("Failed to connect to KawaDB:",e),e}}async disconnect(){if(this.connected)try{this.kawaBrowserDB=null,this.wasmModule=null,this.connected=!1,this.logger.info("Disconnected from KawaDB")}catch(e){throw this.logger.error("Error during disconnect:",e),e}}async query(e,t){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{this.logger.debug("Executing query:",{sql:e,params:t});const r=await this.kawaBrowserDB.query(e,JSON.stringify(t||[]));return"string"==typeof r?JSON.parse(r):r}catch(e){throw this.logger.error("Query execution failed:",e),e}}async addEvent(e,t){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{const r="string"==typeof t?t:JSON.stringify(t);return await this.kawaBrowserDB.add_event(e,r)}catch(e){throw this.logger.error("Failed to add event:",e),e}}async getEvents(e){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{const t=await this.kawaBrowserDB.get_events(e||100);return JSON.parse(t)}catch(e){throw this.logger.error("Failed to get events:",e),e}}async getStats(){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{const e=await this.kawaBrowserDB.get_stats(),t=JSON.parse(e);return{totalEvents:t.total_events||0,totalTables:t.total_tables||0,memoryUsage:t.memory_usage||0,storageSize:t.storage_size||0,lastSync:t.last_sync?new Date(t.last_sync):void 0,uptime:t.uptime||0}}catch(e){throw this.logger.error("Failed to get stats:",e),e}}async optimize(){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{this.logger.info("Database optimization completed")}catch(e){throw this.logger.error("Database optimization failed:",e),e}}async sync(){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{this.config.enableSync&&(await this.kawaBrowserDB.sync_to_cloud(),await this.kawaBrowserDB.sync_from_cloud(),this.logger.info("Data synchronization completed"))}catch(e){throw this.logger.error("Data synchronization failed:",e),e}}async clearAll(){if(!this.connected||!this.kawaBrowserDB)throw new Error("Not connected to database");try{await this.kawaBrowserDB.clear_data(),this.logger.info("All data cleared")}catch(e){throw this.logger.error("Failed to clear data:",e),e}}async beginTransaction(){this.logger.debug("Transaction started (mock)")}async commitTransaction(){this.logger.debug("Transaction committed (mock)")}async rollbackTransaction(){this.logger.debug("Transaction rolled back (mock)")}isConnected(){return this.connected}getRawConnection(){return this.kawaBrowserDB}configureBrowserDB(e){"localStorage"===this.config.storage?e.set_storage_type(this.wasmModule.StorageType.LocalStorage):"indexedDB"===this.config.storage?e.set_storage_type(this.wasmModule.StorageType.IndexedDB):e.set_storage_type(this.wasmModule.StorageType.Memory),this.config.maxEvents&&e.set_max_events(this.config.maxEvents),void 0!==this.config.enableSync&&e.enable_sync(this.config.enableSync),this.config.syncEndpoint&&e.set_sync_endpoint(this.config.syncEndpoint),void 0!==this.config.debugMode&&e.set_debug_mode(this.config.debugMode)}}},603:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Repository=void 0,t.Repository=class{constructor(e,t,r){this.entityConstructor=e,this.connection=t,this.logger=r,this.tableName=this.getTableName()}async save(e){try{return e.hasId()?await this.update(e):await this.create(e)}catch(e){throw this.logger.error("Failed to save entity:",e),e}}async create(e){try{e.hasId()||(e.id=this.generateId()),e.markAsUpdated();const t=`${this.tableName}_created`,r=e.toJSON();return await this.connection.addEvent(t,r),this.logger.debug(`Created entity in ${this.tableName}:`,{id:e.id}),e}catch(e){throw this.logger.error(`Failed to create entity in ${this.tableName}:`,e),e}}async update(e){try{if(!e.hasId())throw new Error("Cannot update entity without ID");e.markAsUpdated();const t=`${this.tableName}_updated`,r=e.toJSON();return await this.connection.addEvent(t,r),this.logger.debug(`Updated entity in ${this.tableName}:`,{id:e.id}),e}catch(e){throw this.logger.error(`Failed to update entity in ${this.tableName}:`,e),e}}async findById(e){try{const t=await this.findByEvent(`${this.tableName}_created`,{id:e});if(0===t.length)return null;const r=await this.findByEvent(`${this.tableName}_updated`,{id:e});let s=t[0],n=new Date(s.createdAt||0);for(const e of r){const t=new Date(e.updatedAt||0);t>n&&(s=e,n=t)}return s}catch(e){throw this.logger.error(`Failed to find entity by ID in ${this.tableName}:`,e),e}}async find(e){try{const t=await this.findByEvent(`${this.tableName}_created`),r=await this.findByEvent(`${this.tableName}_updated`),s=new Map;for(const e of t)e.id&&s.set(e.id,e);for(const e of r)if(e.id){const t=s.get(e.id);(!t||e.updatedAt&&t.updatedAt&&e.updatedAt>t.updatedAt)&&s.set(e.id,e)}let n=Array.from(s.values());return e?.where&&(n=this.applyWhereCondition(n,e.where)),e?.order&&(n=this.applyOrderBy(n,e.order)),e?.skip&&(n=n.slice(e.skip)),e?.take&&(n=n.slice(0,e.take)),n}catch(e){throw this.logger.error(`Failed to find entities in ${this.tableName}:`,e),e}}async findOne(e){const t=await this.find({...e,take:1});return t.length>0?t[0]:null}async delete(e){try{const t=`${this.tableName}_deleted`,r={id:e,deletedAt:new Date};return await this.connection.addEvent(t,r),this.logger.debug(`Deleted entity from ${this.tableName}:`,{id:e}),!0}catch(e){throw this.logger.error(`Failed to delete entity from ${this.tableName}:`,e),e}}async deleteMany(e){try{const t=await this.find({where:e.where});let r=0;for(const e of t)e.id&&(await this.delete(e.id),r++);return this.logger.debug(`Deleted ${r} entities from ${this.tableName}`),r}catch(e){throw this.logger.error(`Failed to delete entities from ${this.tableName}:`,e),e}}async count(e){return(await this.find(e)).length}async exists(e){return null!==await this.findById(e)}async clear(){try{const e=`${this.tableName}_cleared`,t={clearedAt:new Date};await this.connection.addEvent(e,t),this.logger.debug(`Cleared all entities from ${this.tableName}`)}catch(e){throw this.logger.error(`Failed to clear entities from ${this.tableName}:`,e),e}}async findByEvent(e,t){return(await this.connection.getEvents()).filter(r=>{if(r.event_type!==e)return!1;if(t){const e=JSON.parse(r.data);return Object.keys(t).every(r=>e[r]===t[r])}return!0}).map(e=>{const t=JSON.parse(e.data);return this.entityConstructor.fromJSON(t)})}applyWhereCondition(e,t){return Array.isArray(t)?e.filter(e=>t.some(t=>this.matchesCondition(e,t))):e.filter(e=>this.matchesCondition(e,t))}matchesCondition(e,t){return Object.keys(t).every(r=>e[r]===t[r])}applyOrderBy(e,t){return e.sort((e,r)=>{for(const[s,n]of Object.entries(t)){const t=e[s],i=r[s];if(t<i)return"ASC"===n?-1:1;if(t>i)return"ASC"===n?1:-1}return 0})}getTableName(){return this.entityConstructor.name.toLowerCase()}generateId(){return`${this.tableName}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}},630:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Column=i,t.PrimaryKey=function(){return function(e,t){i({primaryKey:!0,nullable:!1})(e,t)}},t.AutoIncrement=function(){return function(e,t){i({autoIncrement:!0,primaryKey:!0,nullable:!1})(e,t)}},t.Unique=function(){return function(e,t){i({unique:!0})(e,t)}},t.Index=function(){return function(e,t){i({index:!0})(e,t)}};const s=r(913),n=r(707);function i(e={}){return function(t,r){const s=t.constructor,i=(0,n.getEntityMetadata)(s);if(i){const t={name:r,type:a(e.type),nullable:e.nullable??!0,primaryKey:e.primaryKey??!1,autoIncrement:e.autoIncrement??!1,defaultValue:e.defaultValue,unique:e.unique??!1,index:e.index??!1};i.columns.push(t),t.primaryKey&&i.primaryKey.push(r)}}}function a(e){if(!e)return s.DataType.STRING;if("string"==typeof e)switch(e.toLowerCase()){case"string":case"text":default:return s.DataType.STRING;case"number":case"int":case"integer":return s.DataType.NUMBER;case"boolean":case"bool":return s.DataType.BOOLEAN;case"date":case"datetime":return s.DataType.DATE;case"json":case"object":return s.DataType.JSON;case"array":return s.DataType.ARRAY}return e}},707:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Entity=function(e){return function(t){const s=e||t.name,n={target:t,name:s,tableName:s.toLowerCase(),columns:[],primaryKey:[],relations:[]};return r.set(t,n),t}},t.getEntityMetadata=function(e){return r.get(e)},t.getAllEntityMetadata=function(){return Array.from(r.values())};const r=new Map},718:function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||(ownKeys=function(e){return ownKeys=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},ownKeys(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=ownKeys(e),s=0;s<r.length;s++)"default"!==r[s]&&__createBinding(t,e,r[s]);return __setModuleDefault(t,e),t}),ownKeys;Object.defineProperty(exports,"__esModule",{value:!0}),exports.WasmLoader=void 0;const Environment_1=__webpack_require__(964);class WasmLoader{constructor(e){this.wasmModule=null,this.loaded=!1,this.loadPromise=null,this.logger=e}async load(e){if(!this.loaded)return this.loadPromise||(this.loadPromise=this.doLoad(e)),this.loadPromise}async doLoad(e){if(this.logger.info("Loading WASM module..."),!Environment_1.Environment.isWebAssemblySupported())throw new Error("WebAssembly is not supported in this environment");try{let t;if(Environment_1.Environment.isWeb()||Environment_1.Environment.isElectronRenderer())t=await this.loadWebWasm(e);else{if(!Environment_1.Environment.isNode()&&!Environment_1.Environment.isElectronMain())throw new Error("Unsupported environment for WASM loading");t=await this.loadNodeWasm(e)}await t.init(),this.wasmModule=t,this.loaded=!0,this.logger.info("WASM module loaded successfully",{version:t.version(),memoryUsage:t.memory_usage()})}catch(e){throw this.logger.error("Failed to load WASM module:",e),e}}async loadWebWasm(e){const t=e||"/kawa-wasm/kawa_wasm.js";try{return await Promise.resolve(`${t}`).then(e=>__importStar(__webpack_require__(191)(e)))}catch(e){return this.loadWebWasmViaScript(t)}}async loadWebWasmViaScript(e){return new Promise((t,r)=>{const s=document.createElement("script");s.src=e,s.type="module",s.onload=()=>{const e=window.kawa_wasm;e?t(e):r(new Error("WASM module not found in global scope"))},s.onerror=e=>{r(new Error(`Failed to load WASM script: ${e}`))},document.head.appendChild(s)})}async loadNodeWasm(wasmPath){const path=wasmPath||"../kawa-wasm/pkg/kawa_wasm.js";try{const wasmModule=eval("require")(path);return wasmModule}catch(e){const t=await Promise.resolve(`${path}`).then(e=>__importStar(__webpack_require__(191)(e)));return t}}getModule(){if(!this.loaded||!this.wasmModule)throw new Error("WASM module not loaded. Call load() first.");return this.wasmModule}isLoaded(){return this.loaded}unload(){this.wasmModule=null,this.loaded=!1,this.loadPromise=null,this.logger.info("WASM module unloaded")}getMemoryUsage(){return this.loaded&&this.wasmModule?this.wasmModule.memory_usage():0}getVersion(){return this.loaded&&this.wasmModule?this.wasmModule.version():"unknown"}}exports.WasmLoader=WasmLoader},802:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.KsqlEngine=void 0;const s=r(105);t.KsqlEngine=class{constructor(e,t){this.wasmKsqlEngine=null,this.continuousQueries=new Map,this.streamingResults=new Map,this.connection=e,this.logger=t}async initialize(){try{this.connection.getRawConnection();const e=this.connection.wasmModule;e&&e.WasmKsqlEngine?(this.wasmKsqlEngine=new e.WasmKsqlEngine,this.logger.info("KSQL engine initialized")):this.logger.warn("WASM KSQL engine not available, using mock implementation")}catch(e){throw this.logger.error("Failed to initialize KSQL engine:",e),e}}async executeKsql(e){try{if(this.logger.debug("Executing KSQL:",e),this.wasmKsqlEngine){const t=this.wasmKsqlEngine.execute_ksql(e);return this.convertWasmResult(t)}return this.executeKsqlMock(e)}catch(e){return this.logger.error("KSQL execution failed:",e),{success:!1,error:e instanceof Error?e.message:String(e),queryType:s.KsqlQueryType.SELECT}}}async createStream(e){const t=this.buildCreateStreamKsql(e);return this.executeKsql(t)}async createTable(e){const t=this.buildCreateTableKsql(e);return this.executeKsql(t)}async createStreamAsSelect(e,t,r){let s=`CREATE STREAM ${e} AS ${t}`;return r&&(s+=` PARTITION BY ${r}`),this.executeKsql(s)}async createContinuousQuery(e,t){const r=`query_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,n={id:r,name:e,sql:t,status:s.QueryStatus.RUNNING,statistics:{messagesProcessed:0,resultsProduced:0,averageProcessingTime:0,throughput:0,memoryUsage:0},inputSources:this.extractInputSources(t),outputTarget:this.extractOutputTarget(t),createdAt:new Date};return this.continuousQueries.set(r,n),this.startContinuousQueryExecution(r),this.logger.info(`Created continuous query: ${e} (${r})`),r}async stopContinuousQuery(e){const t=this.continuousQueries.get(e);return!!t&&(t.status=s.QueryStatus.STOPPED,this.continuousQueries.set(e,t),this.logger.info(`Stopped continuous query: ${e}`),!0)}async listContinuousQueries(){return Array.from(this.continuousQueries.values())}async getStreamingResults(e,t){const r=this.streamingResults.get(e)||[];return t?r.slice(-t):r}async dropStream(e){const t=`DROP STREAM ${e}`;return this.executeKsql(t)}async dropTable(e){const t=`DROP TABLE ${e}`;return this.executeKsql(t)}async showStreams(){return this.executeKsql("SHOW STREAMS")}async showTables(){return this.executeKsql("SHOW TABLES")}async addStreamingData(e,t){if(this.wasmKsqlEngine&&this.wasmKsqlEngine.add_streaming_data){const r="string"==typeof t?t:JSON.stringify(t);this.wasmKsqlEngine.add_streaming_data(e,r)}await this.connection.addEvent(`stream_${e}`,t)}async cleanup(){for(const[e]of this.continuousQueries)await this.stopContinuousQuery(e);this.continuousQueries.clear(),this.streamingResults.clear(),this.wasmKsqlEngine=null,this.logger.info("KSQL engine cleaned up")}buildCreateStreamKsql(e){const t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let r=`CREATE STREAM ${e.name} (${t}) WITH (`;return r+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,e.partitionBy&&(r+=`, PARTITIONS=${e.partitionBy}`),r+=")",r}buildCreateTableKsql(e){const t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let r=`CREATE TABLE ${e.name} (${t}) WITH (`;return r+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,r+=`, KEY='${e.primaryKey.join(",")}'`,r+=")",r}convertWasmResult(e){return{success:e.success(),queryId:e.query_id(),data:e.data()?JSON.parse(e.data()):void 0,error:e.error_message(),queryType:this.parseQueryType(e.query_type())}}executeKsqlMock(e){const t=e.trim().toLowerCase();return t.startsWith("create stream")?{success:!0,queryType:s.KsqlQueryType.CREATE_STREAM,data:[{message:"Stream created successfully"}]}:t.startsWith("create table")?{success:!0,queryType:s.KsqlQueryType.CREATE_TABLE,data:[{message:"Table created successfully"}]}:t.startsWith("show streams")?{success:!0,queryType:s.KsqlQueryType.SHOW_STREAMS,data:[{streams:[]}]}:t.startsWith("show tables")?{success:!0,queryType:s.KsqlQueryType.SHOW_TABLES,data:[{tables:[]}]}:t.startsWith("select")?{success:!0,queryType:s.KsqlQueryType.SELECT,data:[{message:"Query executed (mock)"}]}:{success:!1,error:`Unsupported KSQL statement: ${e}`,queryType:s.KsqlQueryType.SELECT}}parseQueryType(e){switch(e.toUpperCase()){case"CREATE_STREAM":return s.KsqlQueryType.CREATE_STREAM;case"CREATE_TABLE":return s.KsqlQueryType.CREATE_TABLE;case"DROP_STREAM":return s.KsqlQueryType.DROP_STREAM;case"DROP_TABLE":return s.KsqlQueryType.DROP_TABLE;case"SELECT":default:return s.KsqlQueryType.SELECT;case"SHOW_STREAMS":return s.KsqlQueryType.SHOW_STREAMS;case"SHOW_TABLES":return s.KsqlQueryType.SHOW_TABLES}}async startContinuousQueryExecution(e){setInterval(async()=>{const t=this.continuousQueries.get(e);if(t&&t.status===s.QueryStatus.RUNNING)try{const r={queryId:e,data:[{timestamp:new Date,message:"Mock streaming result"}],timestamp:new Date,metadata:{}},s=this.streamingResults.get(e)||[];s.push(r),s.length>1e3&&s.shift(),this.streamingResults.set(e,s),t.statistics.messagesProcessed++,t.statistics.resultsProduced++,t.lastExecution=new Date,this.continuousQueries.set(e,t)}catch(r){this.logger.error(`Continuous query execution failed: ${e}`,r),t.status=s.QueryStatus.ERROR,t.statistics.lastError=r instanceof Error?r.message:String(r),this.continuousQueries.set(e,t)}},5e3)}extractInputSources(e){const t=e.match(/FROM\s+(\w+)/i);return t?[t[1]]:[]}extractOutputTarget(e){const t=e.match(/CREATE\s+(?:STREAM|TABLE)\s+(\w+)/i);return t?t[1]:""}}},891:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.QueryBuilder=void 0;class r{constructor(){this.conditions=[],this.orders=[],this.selectFields=[]}from(e){return this.tableName=e,this}select(...e){return this.selectFields=e,this}where(e,t,r){return this.conditions.push({field:e,operator:t,value:r}),this}whereEquals(e,t){return this.where(e,"eq",t)}orderBy(e,t="ASC"){return this.orders.push({field:e,direction:t}),this}limit(e){return this.limitValue=e,this}offset(e){return this.offsetValue=e,this}toSQL(){let e="SELECT ";return this.selectFields.length>0?e+=this.selectFields.join(", "):e+="*",this.tableName&&(e+=` FROM ${this.tableName}`),this.conditions.length>0&&(e+=" WHERE ",e+=this.conditions.map(e=>this.buildCondition(e)).join(" AND ")),this.orders.length>0&&(e+=" ORDER BY ",e+=this.orders.map(e=>`${e.field} ${e.direction}`).join(", ")),void 0!==this.limitValue&&(e+=` LIMIT ${this.limitValue}`),void 0!==this.offsetValue&&(e+=` OFFSET ${this.offsetValue}`),e}buildCondition(e){const{field:t,operator:r,value:s}=e;switch(r){case"eq":return`${t} = ${this.escapeValue(s)}`;case"ne":return`${t} != ${this.escapeValue(s)}`;case"gt":return`${t} > ${this.escapeValue(s)}`;case"lt":return`${t} < ${this.escapeValue(s)}`;case"gte":return`${t} >= ${this.escapeValue(s)}`;case"lte":return`${t} <= ${this.escapeValue(s)}`;case"like":return`${t} LIKE ${this.escapeValue(s)}`;case"in":return`${t} IN (${(Array.isArray(s)?s:[s]).map(e=>this.escapeValue(e)).join(", ")})`;case"between":if(Array.isArray(s)&&2===s.length)return`${t} BETWEEN ${this.escapeValue(s[0])} AND ${this.escapeValue(s[1])}`;throw new Error("BETWEEN operator requires an array of 2 values");default:throw new Error(`Unsupported operator: ${r}`)}}escapeValue(e){return null==e?"NULL":"string"==typeof e?`'${e.replace(/'/g,"''")}'`:"number"==typeof e||"boolean"==typeof e?String(e):e instanceof Date?`'${e.toISOString()}'`:`'${JSON.stringify(e).replace(/'/g,"''")}'`}reset(){return this.conditions=[],this.orders=[],this.limitValue=void 0,this.offsetValue=void 0,this.selectFields=[],this.tableName=void 0,this}clone(){const e=new r;return e.conditions=[...this.conditions],e.orders=[...this.orders],e.limitValue=this.limitValue,e.offsetValue=this.offsetValue,e.selectFields=[...this.selectFields],e.tableName=this.tableName,e}}t.QueryBuilder=r},913:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.DataType=void 0,function(e){e.STRING="string",e.NUMBER="number",e.BOOLEAN="boolean",e.DATE="date",e.JSON="json",e.ARRAY="array",e.OBJECT="object"}(r||(t.DataType=r={}))},915:function(e,t,r){var s=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||s(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.version=t.KawaORM=void 0,n(r(272),t),n(r(603),t),n(r(891),t),n(r(463),t),n(r(460),t),n(r(802),t),n(r(28),t),n(r(208),t),n(r(630),t),n(r(158),t),n(r(371),t),n(r(105),t),n(r(913),t),n(r(718),t),n(r(964),t),n(r(169),t);var i=r(951);Object.defineProperty(t,"KawaORM",{enumerable:!0,get:function(){return i.KawaORM}}),t.version="0.1.0";var a=r(951);Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a.KawaORM}})},951:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.KawaORM=void 0;const s=r(345),n=r(463),i=r(603),a=r(802),o=r(718),c=r(964),l=r(169);class u extends s.EventEmitter{constructor(e={}){super(),this.connection=null,this.repositories=new Map,this.ksqlEngine=null,this.config={storage:"localStorage",maxEvents:1e4,enableSync:!1,enableKSQL:!0,debugMode:!1,...e},this.logger=new l.Logger(this.config.debugMode),this.wasmLoader=new o.WasmLoader(this.logger),this.logger.info("KawaORM initialized",{config:this.config})}async connect(e={}){this.logger.info("Connecting to KawaDB...");try{await this.wasmLoader.load(),this.connection=new n.Connection(this.wasmLoader,this.config,this.logger),await this.connection.connect(e),this.config.enableKSQL&&(this.ksqlEngine=new a.KsqlEngine(this.connection,this.logger),await this.ksqlEngine.initialize()),this.emit("connected"),this.logger.info("Connected to KawaDB successfully")}catch(e){throw this.logger.error("Failed to connect to KawaDB:",e),this.emit("error",e),e}}async disconnect(){this.connection&&(await this.connection.disconnect(),this.connection=null),this.ksqlEngine&&(await this.ksqlEngine.cleanup(),this.ksqlEngine=null),this.repositories.clear(),this.emit("disconnected"),this.logger.info("Disconnected from KawaDB")}getRepository(e){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");const t=e.name;if(!this.repositories.has(t)){const r=new i.Repository(e,this.connection,this.logger);this.repositories.set(t,r)}return this.repositories.get(t)}getKsqlEngine(){if(!this.ksqlEngine)throw new Error("KSQL engine not initialized. Make sure enableKSQL is true in config.");return this.ksqlEngine}async query(e,t){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");return this.connection.query(e,t)}async transaction(e){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");await this.connection.beginTransaction();try{const t=await e(this);return await this.connection.commitTransaction(),t}catch(e){throw await this.connection.rollbackTransaction(),e}}isConnected(){return null!==this.connection&&this.connection.isConnected()}getEnvironmentInfo(){return{isWeb:c.Environment.isWeb(),isElectron:c.Environment.isElectron(),isNode:c.Environment.isNode(),supportedFeatures:c.Environment.getSupportedFeatures(),wasmLoaded:this.wasmLoader.isLoaded(),connected:this.isConnected()}}async getStats(){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");return this.connection.getStats()}async optimize(){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");await this.connection.optimize(),this.logger.info("Database optimized")}async sync(){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");if(!this.config.enableSync)throw new Error("Sync is not enabled. Set enableSync to true in config.");await this.connection.sync(),this.logger.info("Data synchronized")}async clearAll(){if(!this.connection)throw new Error("Not connected to database. Call connect() first.");await this.connection.clearAll(),this.repositories.clear(),this.logger.info("All data cleared")}}t.KawaORM=u},964:(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.Environment=void 0;class Environment{static isWeb(){return"undefined"!=typeof window&&"undefined"!=typeof document}static isNode(){return"undefined"!=typeof process&&process.versions&&void 0!==process.versions.node}static isElectron(){return"undefined"!=typeof window&&void 0!==window.process&&"renderer"===window.process.type}static isElectronMain(){return this.isNode()&&"undefined"!=typeof process&&"browser"===process.type}static isElectronRenderer(){return this.isElectron()}static getSupportedFeatures(){return this._features||(this._features=this.detectFeatures()),this._features}static detectFeatures(){const features={localStorage:!1,indexedDB:!1,webWorker:!1,serviceWorker:!1,webAssembly:!1,nodeFs:!1,electronRenderer:!1,electronMain:!1};if(this.isWeb()){try{features.localStorage="undefined"!=typeof localStorage&&null!==localStorage}catch(e){features.localStorage=!1}try{features.indexedDB="undefined"!=typeof indexedDB&&null!==indexedDB}catch(e){features.indexedDB=!1}features.webWorker="undefined"!=typeof Worker,features.serviceWorker="serviceWorker"in navigator,features.webAssembly="undefined"!=typeof WebAssembly}if(this.isNode()){try{const fs=eval("require")("fs");features.nodeFs=!!fs}catch(e){features.nodeFs=!1}features.webAssembly="undefined"!=typeof WebAssembly}return features.electronRenderer=this.isElectronRenderer(),features.electronMain=this.isElectronMain(),features}static getOptimalStorageType(){const e=this.getSupportedFeatures();return e.indexedDB?"indexedDB":e.localStorage?"localStorage":"memory"}static isWebAssemblySupported(){return this.getSupportedFeatures().webAssembly}static isPersistentStorageSupported(){const e=this.getSupportedFeatures();return e.localStorage||e.indexedDB||e.nodeFs}static isAsyncStorageSupported(){const e=this.getSupportedFeatures();return e.indexedDB||e.nodeFs}static getEnvironmentInfo(){return{isWeb:this.isWeb(),isNode:this.isNode(),isElectron:this.isElectron(),isElectronMain:this.isElectronMain(),isElectronRenderer:this.isElectronRenderer(),features:this.getSupportedFeatures(),userAgent:this.isWeb()?navigator.userAgent:"undefined"!=typeof process?process.version:"unknown",platform:this.isNode()?process.platform:"web",timestamp:(new Date).toISOString()}}}exports.Environment=Environment,Environment._features=null}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var r=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var __webpack_exports__=__webpack_require__(915);