@junkawasaki/kawadb-orm
Version:
TypeScript ORM for KawaDB with KSQL support - works in Web and Electron environments
1 lines • 37.7 kB
JavaScript
(()=>{var __webpack_modules__={28:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamBuilder=void 0;const r=s(105);class n{constructor(){this.stream={}}name(e){return this.stream.name=e,this}addColumn(e,t,s=!0){return this.stream.columns||(this.stream.columns=[]),this.stream.columns.push({name:e,type:t,nullable:s}),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,s){return this.stream.window={type:"hopping",size:e,advance:t,unit:s},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=r.KsqlDataFormat.JSON),this.stream}toSQL(){const e=this.build(),t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let s=`CREATE STREAM ${e.name} (${t}) WITH (`;return s+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,e.partitionBy&&(s+=`, PARTITIONS=${e.partitionBy}`),s+=")",s}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,r.KsqlDataType.STRING,t)}integerColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.INTEGER,t)}bigintColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.BIGINT,t)}doubleColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.DOUBLE,t)}booleanColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.BOOLEAN,t)}timestampColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.TIMESTAMP,t)}arrayColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.ARRAY,t)}mapColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.MAP,t)}structColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.STRUCT,t)}}t.StreamBuilder=n},105:(e,t)=>{"use strict";var s,r,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"}(s||(t.KsqlQueryType=s={})),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"}(r||(t.KsqlDataType=r={})),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,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Table=function(e){return function(t){const s=(0,r.getEntityMetadata)(t);return s&&(s.tableName=e),t}};const r=s(707)},169:(e,t)=>{"use strict";var s;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"}(s||(t.LogLevel=s={})),t.Logger=class{constructor(e=!1,t="KawaORM"){this.entries=[],this.maxEntries=1e3,this.level=e?s.DEBUG:s.INFO,this.prefix=t}setLevel(e){this.level=e}error(e,t){this.log(s.ERROR,e,t)}warn(e,t){this.log(s.WARN,e,t)}info(e,t){this.log(s.INFO,e,t)}debug(e,t){this.log(s.DEBUG,e,t)}trace(e,t){this.log(s.TRACE,e,t)}log(e,t,r){if(e>this.level)return;const n={level:e,message:t,timestamp:new Date,data:r,stack:e===s.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(),r=s[e.level],n=`[${t}] [${this.prefix}] [${r}] ${e.message}`;switch(e.level){case s.ERROR:console.error(n,e.data||"",e.stack||"");break;case s.WARN:console.warn(n,e.data||"");break;case s.INFO:console.info(n,e.data||"");break;case s.DEBUG:case s.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,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TableBuilder=void 0;const r=s(105);class n{constructor(){this.table={}}name(e){return this.table.name=e,this}addColumn(e,t,s=!0){return this.table.columns||(this.table.columns=[]),this.table.columns.push({name:e,type:t,nullable:s}),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,s){return this.table.window={type:"hopping",size:e,advance:t,unit:s},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=r.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 s=`CREATE TABLE ${e.name} (${t}) WITH (`;return s+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,s+=`, KEY='${e.primaryKey.join(",")}'`,s+=")",s}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,r.KsqlDataType.STRING,t)}integerColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.INTEGER,t)}bigintColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.BIGINT,t)}doubleColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.DOUBLE,t)}booleanColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.BOOLEAN,t)}timestampColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.TIMESTAMP,t)}arrayColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.ARRAY,t)}mapColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.MAP,t)}structColumn(e,t=!0){return this.addColumn(e,r.KsqlDataType.STRUCT,t)}singlePrimaryKey(e){return this.primaryKey(e)}compositePrimaryKey(...e){return this.primaryKey(...e)}}t.TableBuilder=n},272:(e,t)=>{"use strict";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 s=this[t];void 0!==s&&(e[t]=s)}),e}static fromJSON(e){const t=new this;return Object.keys(e).forEach(s=>{void 0!==e[s]&&(t[s]=e[s])}),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 s=this[t];void 0!==s&&(s instanceof Date?e[t]=new Date(s):e[t]="object"==typeof s&&null!==s?JSON.parse(JSON.stringify(s)):s)}),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)}}},371:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},460:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Schema=void 0;const r=s(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 s=t.columns.map(e=>this.formatColumnDefinition(e)),r=t.primaryKey.length>0?`, PRIMARY KEY (${t.primaryKey.join(", ")})`:"";return`CREATE TABLE ${e} (\n ${s.join(",\n ")}${r}\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 r.DataType.STRING:return"VARCHAR(255)";case r.DataType.NUMBER:return"DECIMAL(10,2)";case r.DataType.BOOLEAN:return"BOOLEAN";case r.DataType.DATE:return"TIMESTAMP";case r.DataType.JSON:case r.DataType.ARRAY:case r.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,s]of this.tables)e[t]={name:s.name,columns:s.columns,primaryKey:s.primaryKey,indexes:s.indexes};return{tables:e}}static fromJSON(e){const t=new n;if(e.tables)for(const[s,r]of Object.entries(e.tables)){const e=r,s={name:e.name,columns:e.columns||[],primaryKey:e.primaryKey||[],indexes:e.indexes||[]};t.addTable(s)}return t}clear(){this.tables.clear()}getStats(){const e=this.getAllTables(),t=e.reduce((e,t)=>e+t.columns.length,0),s=e.reduce((e,t)=>e+t.indexes.length,0);return{tableCount:e.length,columnCount:t,indexCount:s,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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Connection=void 0,t.Connection=class{constructor(e,t,s){this.wasmModule=null,this.kawaBrowserDB=null,this.connected=!1,this.wasmLoader=e,this.config=t,this.logger=s}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 s=await this.kawaBrowserDB.query(e,JSON.stringify(t||[]));return"string"==typeof s?JSON.parse(s):s}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 s="string"==typeof t?t:JSON.stringify(t);return await this.kawaBrowserDB.add_event(e,s)}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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Repository=void 0,t.Repository=class{constructor(e,t,s){this.entityConstructor=e,this.connection=t,this.logger=s,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`,s=e.toJSON();return await this.connection.addEvent(t,s),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`,s=e.toJSON();return await this.connection.addEvent(t,s),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 s=await this.findByEvent(`${this.tableName}_updated`,{id:e});let r=t[0],n=new Date(r.createdAt||0);for(const e of s){const t=new Date(e.updatedAt||0);t>n&&(r=e,n=t)}return r}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`),s=await this.findByEvent(`${this.tableName}_updated`),r=new Map;for(const e of t)e.id&&r.set(e.id,e);for(const e of s)if(e.id){const t=r.get(e.id);(!t||e.updatedAt&&t.updatedAt&&e.updatedAt>t.updatedAt)&&r.set(e.id,e)}let n=Array.from(r.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`,s={id:e,deletedAt:new Date};return await this.connection.addEvent(t,s),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 s=0;for(const e of t)e.id&&(await this.delete(e.id),s++);return this.logger.debug(`Deleted ${s} entities from ${this.tableName}`),s}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(s=>{if(s.event_type!==e)return!1;if(t){const e=JSON.parse(s.data);return Object.keys(t).every(s=>e[s]===t[s])}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(s=>e[s]===t[s])}applyOrderBy(e,t){return e.sort((e,s)=>{for(const[r,n]of Object.entries(t)){const t=e[r],i=s[r];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,s)=>{"use strict";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 r=s(913),n=s(707);function i(e={}){return function(t,s){const r=t.constructor,i=(0,n.getEntityMetadata)(r);if(i){const t={name:s,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(s)}}}function a(e){if(!e)return r.DataType.STRING;if("string"==typeof e)switch(e.toLowerCase()){case"string":case"text":default:return r.DataType.STRING;case"number":case"int":case"integer":return r.DataType.NUMBER;case"boolean":case"bool":return r.DataType.BOOLEAN;case"date":case"datetime":return r.DataType.DATE;case"json":case"object":return r.DataType.JSON;case"array":return r.DataType.ARRAY}return e}},707:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Entity=function(e){return function(t){const r=e||t.name,n={target:t,name:r,tableName:r.toLowerCase(),columns:[],primaryKey:[],relations:[]};return s.set(t,n),t}},t.getEntityMetadata=function(e){return s.get(e)},t.getAllEntityMetadata=function(){return Array.from(s.values())};const s=new Map},718:function(__unused_webpack_module,exports,__webpack_require__){"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,n)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),__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 s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[t.length]=s);return t},ownKeys(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s=ownKeys(e),r=0;r<s.length;r++)"default"!==s[r]&&__createBinding(t,e,s[r]);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,s)=>{const r=document.createElement("script");r.src=e,r.type="module",r.onload=()=>{const e=window.kawa_wasm;e?t(e):s(new Error("WASM module not found in global scope"))},r.onerror=e=>{s(new Error(`Failed to load WASM script: ${e}`))},document.head.appendChild(r)})}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,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.KsqlEngine=void 0;const r=s(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:r.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,s){let r=`CREATE STREAM ${e} AS ${t}`;return s&&(r+=` PARTITION BY ${s}`),this.executeKsql(r)}async createContinuousQuery(e,t){const s=`query_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,n={id:s,name:e,sql:t,status:r.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(s,n),this.startContinuousQueryExecution(s),this.logger.info(`Created continuous query: ${e} (${s})`),s}async stopContinuousQuery(e){const t=this.continuousQueries.get(e);return!!t&&(t.status=r.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 s=this.streamingResults.get(e)||[];return t?s.slice(-t):s}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 s="string"==typeof t?t:JSON.stringify(t);this.wasmKsqlEngine.add_streaming_data(e,s)}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 s=`CREATE STREAM ${e.name} (${t}) WITH (`;return s+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,e.partitionBy&&(s+=`, PARTITIONS=${e.partitionBy}`),s+=")",s}buildCreateTableKsql(e){const t=e.columns.map(e=>`${e.name} ${e.type}${e.nullable?"":" NOT NULL"}`).join(", ");let s=`CREATE TABLE ${e.name} (${t}) WITH (`;return s+=`KAFKA_TOPIC='${e.topic}', VALUE_FORMAT='${e.format}'`,s+=`, KEY='${e.primaryKey.join(",")}'`,s+=")",s}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:r.KsqlQueryType.CREATE_STREAM,data:[{message:"Stream created successfully"}]}:t.startsWith("create table")?{success:!0,queryType:r.KsqlQueryType.CREATE_TABLE,data:[{message:"Table created successfully"}]}:t.startsWith("show streams")?{success:!0,queryType:r.KsqlQueryType.SHOW_STREAMS,data:[{streams:[]}]}:t.startsWith("show tables")?{success:!0,queryType:r.KsqlQueryType.SHOW_TABLES,data:[{tables:[]}]}:t.startsWith("select")?{success:!0,queryType:r.KsqlQueryType.SELECT,data:[{message:"Query executed (mock)"}]}:{success:!1,error:`Unsupported KSQL statement: ${e}`,queryType:r.KsqlQueryType.SELECT}}parseQueryType(e){switch(e.toUpperCase()){case"CREATE_STREAM":return r.KsqlQueryType.CREATE_STREAM;case"CREATE_TABLE":return r.KsqlQueryType.CREATE_TABLE;case"DROP_STREAM":return r.KsqlQueryType.DROP_STREAM;case"DROP_TABLE":return r.KsqlQueryType.DROP_TABLE;case"SELECT":default:return r.KsqlQueryType.SELECT;case"SHOW_STREAMS":return r.KsqlQueryType.SHOW_STREAMS;case"SHOW_TABLES":return r.KsqlQueryType.SHOW_TABLES}}async startContinuousQueryExecution(e){setInterval(async()=>{const t=this.continuousQueries.get(e);if(t&&t.status===r.QueryStatus.RUNNING)try{const s={queryId:e,data:[{timestamp:new Date,message:"Mock streaming result"}],timestamp:new Date,metadata:{}},r=this.streamingResults.get(e)||[];r.push(s),r.length>1e3&&r.shift(),this.streamingResults.set(e,r),t.statistics.messagesProcessed++,t.statistics.resultsProduced++,t.lastExecution=new Date,this.continuousQueries.set(e,t)}catch(s){this.logger.error(`Continuous query execution failed: ${e}`,s),t.status=r.QueryStatus.ERROR,t.statistics.lastError=s instanceof Error?s.message:String(s),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)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QueryBuilder=void 0;class s{constructor(){this.conditions=[],this.orders=[],this.selectFields=[]}from(e){return this.tableName=e,this}select(...e){return this.selectFields=e,this}where(e,t,s){return this.conditions.push({field:e,operator:t,value:s}),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:s,value:r}=e;switch(s){case"eq":return`${t} = ${this.escapeValue(r)}`;case"ne":return`${t} != ${this.escapeValue(r)}`;case"gt":return`${t} > ${this.escapeValue(r)}`;case"lt":return`${t} < ${this.escapeValue(r)}`;case"gte":return`${t} >= ${this.escapeValue(r)}`;case"lte":return`${t} <= ${this.escapeValue(r)}`;case"like":return`${t} LIKE ${this.escapeValue(r)}`;case"in":return`${t} IN (${(Array.isArray(r)?r:[r]).map(e=>this.escapeValue(e)).join(", ")})`;case"between":if(Array.isArray(r)&&2===r.length)return`${t} BETWEEN ${this.escapeValue(r[0])} AND ${this.escapeValue(r[1])}`;throw new Error("BETWEEN operator requires an array of 2 values");default:throw new Error(`Unsupported operator: ${s}`)}}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 s;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=s},913:(e,t)=>{"use strict";var s;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"}(s||(t.DataType=s={}))},915:function(e,t,s){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var n=Object.getOwnPropertyDescriptor(t,s);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,n)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),n=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||r(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.version=t.KawaORM=void 0,n(s(272),t),n(s(603),t),n(s(891),t),n(s(463),t),n(s(460),t),n(s(802),t),n(s(28),t),n(s(208),t),n(s(630),t),n(s(158),t),n(s(371),t),n(s(105),t),n(s(913),t),n(s(718),t),n(s(964),t),n(s(169),t);var i=s(951);Object.defineProperty(t,"KawaORM",{enumerable:!0,get:function(){return i.KawaORM}}),t.version="0.1.0";var a=s(951);Object.defineProperty(t,"default",{enumerable:!0,get:function(){return a.KawaORM}})},921:e=>{"use strict";e.exports=require("eventemitter3")},951:(e,t,s)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.KawaORM=void 0;const r=s(921),n=s(463),i=s(603),a=s(802),o=s(718),c=s(964),l=s(169);class u extends r.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 s=new i.Repository(e,this.connection,this.logger);this.repositories.set(t,s)}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)=>{"use strict";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 s=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(s.exports,s,s.exports,__webpack_require__),s.exports}__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var __webpack_exports__=__webpack_require__(915);module.exports=__webpack_exports__})();