dbxlite-ui 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/assets/assets/argon2-Ds2nOx5S.js +548 -0
  2. package/assets/assets/{argon2-VsC-m8hX.js → argon2-gAk7W4yq.js} +2 -2
  3. package/assets/assets/{cssMode-BwlhJ7iR.js → cssMode-DjCAhvCq.js} +1 -1
  4. package/assets/assets/{duckdb-browser-BSQM4t65.js → duckdb-browser-BX0LtQQW.js} +1 -1
  5. package/assets/assets/{freemarker2-BkjRLolx.js → freemarker2-CowYmQxk.js} +1 -1
  6. package/assets/assets/{handlebars-CBMLM90w.js → handlebars-CT3UT-Rw.js} +1 -1
  7. package/assets/assets/{html-CHZal9Bq.js → html-DiYJ0pIZ.js} +1 -1
  8. package/assets/assets/{htmlMode-C9GZl6CA.js → htmlMode-eiLVFLp-.js} +1 -1
  9. package/assets/assets/{javascript-3HFHugwg.js → javascript-CJ2lg7Wg.js} +1 -1
  10. package/assets/assets/{jsonMode-uH9DvT2S.js → jsonMode-CDh3j4hY.js} +1 -1
  11. package/assets/assets/{liquid-Ynp44jOk.js → liquid-SJpu3XRo.js} +1 -1
  12. package/assets/assets/main-CiZpADZR.css +1 -0
  13. package/assets/assets/{index-BZdWDIbu.js → main-CyH5V7SF.js} +28181 -20948
  14. package/assets/assets/{mdx-B0LCS-Lw.js → mdx-DAZ43DF4.js} +1 -1
  15. package/assets/assets/{monaco-editor-DbSHhIAW.js → monaco-editor-CbzSR0rd.js} +34 -49
  16. package/assets/assets/oauth-callback-BSauVj6P.js +1 -0
  17. package/assets/assets/oauth-constants-m7PlKcMR.js +1 -0
  18. package/assets/assets/{python-BLbP2FhE.js → python-Dp4JNWW2.js} +1 -1
  19. package/assets/assets/{razor-CrzRfK-c.js → razor-C5KN2PrG.js} +1 -1
  20. package/assets/assets/{react-vendor-CJNQXC79.js → react-vendor-B2Ij4Vfr.js} +2 -2
  21. package/assets/assets/{tsMode-B-o6MNSg.js → tsMode-C29B5Qai.js} +1 -1
  22. package/assets/assets/{typescript-nABxf5PW.js → typescript-OZh8Ppiv.js} +1 -1
  23. package/assets/assets/{worker-D4TW6ZaR.js → worker-D76K9Q9Q.js} +1 -1
  24. package/assets/assets/{xml-BOnVlNcs.js → xml-BevTyp2m.js} +1 -1
  25. package/assets/assets/{yaml-Yl61aKaY.js → yaml-DXNKOJL7.js} +1 -1
  26. package/assets/duckdb/duckdb-browser-blocking.mjs +14 -0
  27. package/assets/duckdb/duckdb-browser-coi.pthread.worker.js +14 -0
  28. package/assets/duckdb/duckdb-browser-coi.worker.js +14 -0
  29. package/assets/duckdb/duckdb-browser-eh.worker.js +14 -0
  30. package/assets/duckdb/duckdb-browser-mvp.worker.js +14 -0
  31. package/assets/duckdb/duckdb-browser.mjs +2 -0
  32. package/assets/duckdb/duckdb-coi.wasm +0 -0
  33. package/assets/duckdb/duckdb-eh.wasm +0 -0
  34. package/assets/duckdb/duckdb-mvp.wasm +0 -0
  35. package/assets/index.html +5 -4
  36. package/assets/oauth-callback.html +57 -0
  37. package/dist/cli.js +23 -5
  38. package/package.json +4 -2
  39. package/assets/assets/argon2-CtQQN5by.js +0 -531
  40. package/assets/assets/index-Bls2JT31.css +0 -1
  41. package/assets/duckdb/.gitignore +0 -8
@@ -0,0 +1,2 @@
1
+ var j=Object.create;var P=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var X=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var $=(s,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of V(e))!J.call(s,o)&&o!==r&&P(s,o,{get:()=>e[o],enumerable:!(t=K(e,o))||t.enumerable});return s};var Z=(s,e,r)=>(r=s!=null?j(z(s)):{},$(e||!s||!s.__esModule?P(r,"default",{value:s,enumerable:!0}):r,s));var q=X((Ze,H)=>{H.exports=Worker});var ee=(o=>(o[o.UNDEFINED=0]="UNDEFINED",o[o.AUTOMATIC=1]="AUTOMATIC",o[o.READ_ONLY=2]="READ_ONLY",o[o.READ_WRITE=3]="READ_WRITE",o))(ee||{});var re=(n=>(n[n.IDENTIFIER=0]="IDENTIFIER",n[n.NUMERIC_CONSTANT=1]="NUMERIC_CONSTANT",n[n.STRING_CONSTANT=2]="STRING_CONSTANT",n[n.OPERATOR=3]="OPERATOR",n[n.KEYWORD=4]="KEYWORD",n[n.COMMENT=5]="COMMENT",n))(re||{});var te=(i=>(i[i.NONE=0]="NONE",i[i.DEBUG=1]="DEBUG",i[i.INFO=2]="INFO",i[i.WARNING=3]="WARNING",i[i.ERROR=4]="ERROR",i))(te||{}),se=(n=>(n[n.NONE=0]="NONE",n[n.CONNECT=1]="CONNECT",n[n.DISCONNECT=2]="DISCONNECT",n[n.OPEN=3]="OPEN",n[n.QUERY=4]="QUERY",n[n.INSTANTIATE=5]="INSTANTIATE",n))(se||{}),ne=(n=>(n[n.NONE=0]="NONE",n[n.OK=1]="OK",n[n.ERROR=2]="ERROR",n[n.START=3]="START",n[n.RUN=4]="RUN",n[n.CAPTURE=5]="CAPTURE",n))(ne||{}),oe=(i=>(i[i.NONE=0]="NONE",i[i.WEB_WORKER=1]="WEB_WORKER",i[i.NODE_WORKER=2]="NODE_WORKER",i[i.BINDINGS=3]="BINDINGS",i[i.ASYNC_DUCKDB=4]="ASYNC_DUCKDB",i))(oe||{}),N=class{log(e){}},A=class{constructor(e=2){this.level=e}log(e){e.level>=this.level&&console.log(e)}};function Te(s){switch(s){case 0:return"NONE";case 1:return"DEBUG";case 2:return"INFO";case 3:return"WARNING";case 4:return"ERROR";default:return"?"}}function be(s){switch(s){case 0:return"NONE";case 1:return"OK";case 2:return"ERROR";case 3:return"START";case 4:return"RUN";case 5:return"CAPTURE";default:return"?"}}function Ie(s){switch(s){case 1:return"CONNECT";case 2:return"DISCONNECT";case 5:return"INSTANTIATE";case 3:return"OPEN";case 4:return"QUERY";default:return"?"}}function ke(s){switch(s){case 0:return"NONE";case 1:return"WEB WORKER";case 2:return"NODE WORKER";case 3:return"DUCKDB BINDINGS";case 4:return"DUCKDB";default:return"?"}}var ie=(t=>(t[t.SUCCESS=0]="SUCCESS",t[t.MAX_ARROW_ERROR=255]="MAX_ARROW_ERROR",t[t.DUCKDB_WASM_RETRY=256]="DUCKDB_WASM_RETRY",t))(ie||{});function ge(s){return s<=255}function Se(s){return s===256}import*as u from"apache-arrow";var E=class{constructor(e,r){this._bindings=e,this._conn=r}get bindings(){return this._bindings}async close(){return this._bindings.disconnect(this._conn)}useUnsafe(e){return e(this._bindings,this._conn)}async query(e){this._bindings.logger.log({timestamp:new Date,level:2,origin:4,topic:4,event:4,value:e});let r=await this._bindings.runQuery(this._conn,e),t=u.RecordBatchReader.from(r);return console.assert(t.isSync(),"Reader is not sync"),console.assert(t.isFile(),"Reader is not file"),new u.Table(t)}async send(e,r=!1){this._bindings.logger.log({timestamp:new Date,level:2,origin:4,topic:4,event:4,value:e});let t=await this._bindings.startPendingQuery(this._conn,e,r);for(;t==null;){if(this._bindings.isDetached()){console.error("cannot send a message since the worker is not set!");return}t=await this._bindings.pollPendingQuery(this._conn)}let o=new p(this._bindings,this._conn,t),i=await u.RecordBatchReader.from(o);return console.assert(i.isAsync()),console.assert(i.isStream()),i}async cancelSent(){return await this._bindings.cancelPendingQuery(this._conn)}async getTableNames(e){return await this._bindings.getTableNames(this._conn,e)}async prepare(e){let r=await this._bindings.createPrepared(this._conn,e);return new b(this._bindings,this._conn,r)}async insertArrowTable(e,r){let t=u.tableToIPC(e,"stream");await this.insertArrowFromIPCStream(t,r)}async insertArrowFromIPCStream(e,r){await this._bindings.insertArrowFromIPCStream(this._conn,e,r)}async insertCSVFromPath(e,r){await this._bindings.insertCSVFromPath(this._conn,e,r)}async insertJSONFromPath(e,r){await this._bindings.insertJSONFromPath(this._conn,e,r)}},p=class{constructor(e,r,t){this.db=e;this.conn=r;this.header=t;this._first=!0,this._depleted=!1,this._inFlight=null}async next(){if(this._first)return this._first=!1,{done:!1,value:this.header};if(this._depleted)return{done:!0,value:null};let e=null;for(this._inFlight!=null&&(e=await this._inFlight,this._inFlight=null);e==null;)e=await this.db.fetchQueryResults(this.conn);return this._depleted=e.length==0,this._depleted||(this._inFlight=this.db.fetchQueryResults(this.conn)),{done:this._depleted,value:e}}[Symbol.asyncIterator](){return this}},b=class{constructor(e,r,t){this.bindings=e,this.connectionId=r,this.statementId=t}async close(){await this.bindings.closePrepared(this.connectionId,this.statementId)}async query(...e){let r=await this.bindings.runPrepared(this.connectionId,this.statementId,e),t=u.RecordBatchReader.from(r);return console.assert(t.isSync()),console.assert(t.isFile()),new u.Table(t)}async send(...e){let r=await this.bindings.sendPrepared(this.connectionId,this.statementId,e),t=new p(this.bindings,this.connectionId,r),o=await u.RecordBatchReader.from(t);return console.assert(o.isAsync()),console.assert(o.isStream()),o}};var D=(c=>(c.CANCEL_PENDING_QUERY="CANCEL_PENDING_QUERY",c.CLOSE_PREPARED="CLOSE_PREPARED",c.COLLECT_FILE_STATISTICS="COLLECT_FILE_STATISTICS",c.REGISTER_OPFS_FILE_NAME="REGISTER_OPFS_FILE_NAME",c.CONNECT="CONNECT",c.COPY_FILE_TO_BUFFER="COPY_FILE_TO_BUFFER",c.COPY_FILE_TO_PATH="COPY_FILE_TO_PATH",c.CREATE_PREPARED="CREATE_PREPARED",c.DISCONNECT="DISCONNECT",c.DROP_FILE="DROP_FILE",c.DROP_FILES="DROP_FILES",c.EXPORT_FILE_STATISTICS="EXPORT_FILE_STATISTICS",c.FETCH_QUERY_RESULTS="FETCH_QUERY_RESULTS",c.FLUSH_FILES="FLUSH_FILES",c.GET_FEATURE_FLAGS="GET_FEATURE_FLAGS",c.GET_TABLE_NAMES="GET_TABLE_NAMES",c.GET_VERSION="GET_VERSION",c.GLOB_FILE_INFOS="GLOB_FILE_INFOS",c.INSERT_ARROW_FROM_IPC_STREAM="INSERT_ARROW_FROM_IPC_STREAM",c.INSERT_CSV_FROM_PATH="IMPORT_CSV_FROM_PATH",c.INSERT_JSON_FROM_PATH="IMPORT_JSON_FROM_PATH",c.INSTANTIATE="INSTANTIATE",c.OPEN="OPEN",c.PING="PING",c.POLL_PENDING_QUERY="POLL_PENDING_QUERY",c.REGISTER_FILE_BUFFER="REGISTER_FILE_BUFFER",c.REGISTER_FILE_HANDLE="REGISTER_FILE_HANDLE",c.REGISTER_FILE_URL="REGISTER_FILE_URL",c.RESET="RESET",c.RUN_PREPARED="RUN_PREPARED",c.RUN_QUERY="RUN_QUERY",c.SEND_PREPARED="SEND_PREPARED",c.START_PENDING_QUERY="START_PENDING_QUERY",c.TOKENIZE="TOKENIZE",c))(D||{}),O=(l=>(l.CONNECTION_INFO="CONNECTION_INFO",l.ERROR="ERROR",l.FEATURE_FLAGS="FEATURE_FLAGS",l.FILE_BUFFER="FILE_BUFFER",l.FILE_INFOS="FILE_INFOS",l.FILE_SIZE="FILE_SIZE",l.FILE_STATISTICS="FILE_STATISTICS",l.INSTANTIATE_PROGRESS="INSTANTIATE_PROGRESS",l.LOG="LOG",l.PROGRESS_UPDATE="PROGRESS_UPDATE",l.OK="OK",l.PREPARED_STATEMENT_ID="PREPARED_STATEMENT_ID",l.QUERY_PLAN="QUERY_PLAN",l.QUERY_RESULT="QUERY_RESULT",l.QUERY_RESULT_CHUNK="QUERY_RESULT_CHUNK",l.QUERY_RESULT_HEADER="QUERY_RESULT_HEADER",l.QUERY_RESULT_HEADER_OR_NULL="QUERY_RESULT_HEADER_OR_NULL",l.REGISTERED_FILE="REGISTERED_FILE",l.SCRIPT_TOKENS="SCRIPT_TOKENS",l.SUCCESS="SUCCESS",l.TABLE_NAMES="TABLE_NAMES",l.VERSION_STRING="VERSION_STRING",l))(O||{}),a=class{constructor(e,r){this.promiseResolver=()=>{};this.promiseRejecter=()=>{};this.type=e,this.data=r,this.promise=new Promise((t,o)=>{this.promiseResolver=t,this.promiseRejecter=o})}};import*as d from"apache-arrow";function _(s){switch(s.typeId){case d.Type.Binary:return{sqlType:"binary"};case d.Type.Bool:return{sqlType:"bool"};case d.Type.Date:return{sqlType:"date"};case d.Type.DateDay:return{sqlType:"date32[d]"};case d.Type.DateMillisecond:return{sqlType:"date64[ms]"};case d.Type.Decimal:{let e=s;return{sqlType:"decimal",precision:e.precision,scale:e.scale}}case d.Type.Float:return{sqlType:"float"};case d.Type.Float16:return{sqlType:"float16"};case d.Type.Float32:return{sqlType:"float32"};case d.Type.Float64:return{sqlType:"float64"};case d.Type.Int:return{sqlType:"int32"};case d.Type.Int16:return{sqlType:"int16"};case d.Type.Int32:return{sqlType:"int32"};case d.Type.Int64:return{sqlType:"int64"};case d.Type.Uint16:return{sqlType:"uint16"};case d.Type.Uint32:return{sqlType:"uint32"};case d.Type.Uint64:return{sqlType:"uint64"};case d.Type.Uint8:return{sqlType:"uint8"};case d.Type.IntervalDayTime:return{sqlType:"interval[dt]"};case d.Type.IntervalYearMonth:return{sqlType:"interval[m]"};case d.Type.List:return{sqlType:"list",valueType:_(s.valueType)};case d.Type.FixedSizeBinary:return{sqlType:"fixedsizebinary",byteWidth:s.byteWidth};case d.Type.Null:return{sqlType:"null"};case d.Type.Utf8:return{sqlType:"utf8"};case d.Type.Struct:return{sqlType:"struct",fields:s.children.map(r=>R(r.name,r.type))};case d.Type.Map:{let e=s;return{sqlType:"map",keyType:_(e.keyType),valueType:_(e.valueType)}}case d.Type.Time:return{sqlType:"time[s]"};case d.Type.TimeMicrosecond:return{sqlType:"time[us]"};case d.Type.TimeMillisecond:return{sqlType:"time[ms]"};case d.Type.TimeNanosecond:return{sqlType:"time[ns]"};case d.Type.TimeSecond:return{sqlType:"time[s]"};case d.Type.Timestamp:return{sqlType:"timestamp",timezone:s.timezone||void 0};case d.Type.TimestampSecond:return{sqlType:"timestamp[s]",timezone:s.timezone||void 0};case d.Type.TimestampMicrosecond:return{sqlType:"timestamp[us]",timezone:s.timezone||void 0};case d.Type.TimestampNanosecond:return{sqlType:"timestamp[ns]",timezone:s.timezone||void 0};case d.Type.TimestampMillisecond:return{sqlType:"timestamp[ms]",timezone:s.timezone||void 0}}throw new Error("unsupported arrow type: ".concat(s.toString()))}function R(s,e){let r=_(e);return r.name=s,r}var ae=/'(opfs:\/\/\S*?)'/g,de=/(opfs:\/\/\S*?)/g;function L(s){return s.search(de)>-1}function F(s){return[...s.matchAll(ae)].map(e=>e[1])}var ce=new TextEncoder,f=class{constructor(e,r=null){this._onInstantiationProgress=[];this._onExecutionProgress=[];this._worker=null;this._workerShutdownPromise=null;this._workerShutdownResolver=()=>{};this._nextMessageId=0;this._pendingRequests=new Map;this._config={};this._logger=e,this._onMessageHandler=this.onMessage.bind(this),this._onErrorHandler=this.onError.bind(this),this._onCloseHandler=this.onClose.bind(this),r!=null&&this.attach(r)}get logger(){return this._logger}get config(){return this._config}attach(e){this._worker=e,this._worker.addEventListener("message",this._onMessageHandler),this._worker.addEventListener("error",this._onErrorHandler),this._worker.addEventListener("close",this._onCloseHandler),this._workerShutdownPromise=new Promise((r,t)=>{this._workerShutdownResolver=r})}detach(){this._worker&&(this._worker.removeEventListener("message",this._onMessageHandler),this._worker.removeEventListener("error",this._onErrorHandler),this._worker.removeEventListener("close",this._onCloseHandler),this._worker=null,this._workerShutdownResolver(null),this._workerShutdownPromise=null,this._workerShutdownResolver=()=>{})}async terminate(){this._worker&&(this._worker.terminate(),this._worker=null,this._workerShutdownPromise=null,this._workerShutdownResolver=()=>{})}async postTask(e,r=[]){if(!this._worker){console.error("cannot send a message since the worker is not set!:"+e.type+","+e.data);return}let t=this._nextMessageId++;return this._pendingRequests.set(t,e),this._worker.postMessage({messageId:t,type:e.type,data:e.data},r),await e.promise}onMessage(e){var o;let r=e.data;switch(r.type){case"PROGRESS_UPDATE":{for(let i of this._onExecutionProgress)i(r.data);return}case"LOG":{this._logger.log(r.data);return}case"INSTANTIATE_PROGRESS":{for(let i of this._onInstantiationProgress)i(r.data);return}}let t=this._pendingRequests.get(r.requestId);if(!t){console.warn("unassociated response: [".concat(r.requestId,", ").concat(r.type.toString(),"]"));return}if(this._pendingRequests.delete(r.requestId),r.type=="ERROR"){let i=new Error(r.data.message);i.name=r.data.name,(o=Object.getOwnPropertyDescriptor(i,"stack"))!=null&&o.writable&&(i.stack=r.data.stack),t.promiseRejecter(i);return}switch(t.type){case"CLOSE_PREPARED":case"COLLECT_FILE_STATISTICS":case"REGISTER_OPFS_FILE_NAME":case"COPY_FILE_TO_PATH":case"DISCONNECT":case"DROP_FILE":case"DROP_FILES":case"FLUSH_FILES":case"INSERT_ARROW_FROM_IPC_STREAM":case"IMPORT_CSV_FROM_PATH":case"IMPORT_JSON_FROM_PATH":case"OPEN":case"PING":case"REGISTER_FILE_BUFFER":case"REGISTER_FILE_HANDLE":case"REGISTER_FILE_URL":case"RESET":if(r.type=="OK"){t.promiseResolver(r.data);return}break;case"INSTANTIATE":if(this._onInstantiationProgress=[],r.type=="OK"){t.promiseResolver(r.data);return}break;case"GLOB_FILE_INFOS":if(r.type=="FILE_INFOS"){t.promiseResolver(r.data);return}break;case"GET_VERSION":if(r.type=="VERSION_STRING"){t.promiseResolver(r.data);return}break;case"GET_FEATURE_FLAGS":if(r.type=="FEATURE_FLAGS"){t.promiseResolver(r.data);return}break;case"GET_TABLE_NAMES":if(r.type=="TABLE_NAMES"){t.promiseResolver(r.data);return}break;case"TOKENIZE":if(r.type=="SCRIPT_TOKENS"){t.promiseResolver(r.data);return}break;case"COPY_FILE_TO_BUFFER":if(r.type=="FILE_BUFFER"){t.promiseResolver(r.data);return}break;case"EXPORT_FILE_STATISTICS":if(r.type=="FILE_STATISTICS"){t.promiseResolver(r.data);return}break;case"CONNECT":if(r.type=="CONNECTION_INFO"){t.promiseResolver(r.data);return}break;case"RUN_PREPARED":case"RUN_QUERY":if(r.type=="QUERY_RESULT"){t.promiseResolver(r.data);return}break;case"SEND_PREPARED":if(r.type=="QUERY_RESULT_HEADER"){t.promiseResolver(r.data);return}break;case"START_PENDING_QUERY":if(r.type=="QUERY_RESULT_HEADER_OR_NULL"){t.promiseResolver(r.data);return}break;case"POLL_PENDING_QUERY":if(r.type=="QUERY_RESULT_HEADER_OR_NULL"){t.promiseResolver(r.data);return}break;case"CANCEL_PENDING_QUERY":if(this._onInstantiationProgress=[],r.type=="SUCCESS"){t.promiseResolver(r.data);return}break;case"FETCH_QUERY_RESULTS":if(r.type=="QUERY_RESULT_CHUNK"){t.promiseResolver(r.data);return}break;case"CREATE_PREPARED":if(r.type=="PREPARED_STATEMENT_ID"){t.promiseResolver(r.data);return}break}t.promiseRejecter(new Error("unexpected response type: ".concat(r.type.toString())))}onError(e){console.error(e),console.error("error in duckdb worker: ".concat(e.message)),this._pendingRequests.clear()}onClose(){if(this._workerShutdownResolver(null),this._pendingRequests.size!=0){console.warn("worker terminated with ".concat(this._pendingRequests.size," pending requests"));return}this._pendingRequests.clear()}isDetached(){return!this._worker}async reset(){let e=new a("RESET",null);return await this.postTask(e)}async ping(){let e=new a("PING",null);await this.postTask(e)}async dropFile(e){let r=new a("DROP_FILE",e);return await this.postTask(r)}async dropFiles(e){let r=new a("DROP_FILES",e);return await this.postTask(r)}async flushFiles(){let e=new a("FLUSH_FILES",null);return await this.postTask(e)}async instantiate(e,r=null,t=o=>{}){this._onInstantiationProgress.push(t);let o=new a("INSTANTIATE",[e,r]);return await this.postTask(o)}async getVersion(){let e=new a("GET_VERSION",null);return await this.postTask(e)}async getFeatureFlags(){let e=new a("GET_FEATURE_FLAGS",null);return await this.postTask(e)}async open(e){this._config=e;let r=new a("OPEN",e);await this.postTask(r)}async tokenize(e){let r=new a("TOKENIZE",e);return await this.postTask(r)}async connectInternal(){let e=new a("CONNECT",null);return await this.postTask(e)}async connect(){let e=await this.connectInternal();return new E(this,e)}async disconnect(e){let r=new a("DISCONNECT",e);await this.postTask(r)}async runQuery(e,r){if(this.shouldOPFSFileHandling()){let t=await this.registerOPFSFileFromSQL(r);try{return await this._runQueryAsync(e,r)}finally{t.length>0&&await this.dropFiles(t)}}else return await this._runQueryAsync(e,r)}async _runQueryAsync(e,r){let t=new a("RUN_QUERY",[e,r]);return await this.postTask(t)}async startPendingQuery(e,r,t=!1){if(this.shouldOPFSFileHandling()){let o=await this.registerOPFSFileFromSQL(r);try{return await this._startPendingQueryAsync(e,r,t)}finally{o.length>0&&await this.dropFiles(o)}}else return await this._startPendingQueryAsync(e,r,t)}async _startPendingQueryAsync(e,r,t=!1){let o=new a("START_PENDING_QUERY",[e,r,t]);return await this.postTask(o)}async pollPendingQuery(e){let r=new a("POLL_PENDING_QUERY",e);return await this.postTask(r)}async cancelPendingQuery(e){let r=new a("CANCEL_PENDING_QUERY",e);return await this.postTask(r)}async fetchQueryResults(e){let r=new a("FETCH_QUERY_RESULTS",e);return await this.postTask(r)}async getTableNames(e,r){let t=new a("GET_TABLE_NAMES",[e,r]);return await this.postTask(t)}async createPrepared(e,r){let t=new a("CREATE_PREPARED",[e,r]);return await this.postTask(t)}async closePrepared(e,r){let t=new a("CLOSE_PREPARED",[e,r]);await this.postTask(t)}async runPrepared(e,r,t){let o=new a("RUN_PREPARED",[e,r,t]);return await this.postTask(o)}async sendPrepared(e,r,t){let o=new a("SEND_PREPARED",[e,r,t]);return await this.postTask(o)}async globFiles(e){let r=new a("GLOB_FILE_INFOS",e);return await this.postTask(r)}async registerFileText(e,r){let t=ce.encode(r);await this.registerFileBuffer(e,t)}async registerFileURL(e,r,t,o){r===void 0&&(r=e);let i=new a("REGISTER_FILE_URL",[e,r,t,o]);await this.postTask(i)}async registerEmptyFileBuffer(e){}async registerFileBuffer(e,r){let t=new a("REGISTER_FILE_BUFFER",[e,r]);await this.postTask(t,[r.buffer])}async registerFileHandle(e,r,t,o){let i=new a("REGISTER_FILE_HANDLE",[e,r,t,o]);await this.postTask(i,[])}async registerOPFSFileName(e){let r=new a("REGISTER_OPFS_FILE_NAME",[e]);await this.postTask(r,[])}async collectFileStatistics(e,r){let t=new a("COLLECT_FILE_STATISTICS",[e,r]);await this.postTask(t,[])}async exportFileStatistics(e){let r=new a("EXPORT_FILE_STATISTICS",e);return await this.postTask(r,[])}async copyFileToBuffer(e){let r=new a("COPY_FILE_TO_BUFFER",e);return await this.postTask(r)}async copyFileToPath(e,r){let t=new a("COPY_FILE_TO_PATH",[e,r]);await this.postTask(t)}async insertArrowFromIPCStream(e,r,t){if(r.length==0)return;let o=new a("INSERT_ARROW_FROM_IPC_STREAM",[e,r,t]);await this.postTask(o,[r.buffer])}async insertCSVFromPath(e,r,t){if(t.columns!==void 0){let i=[];for(let n in t.columns){let T=t.columns[n];i.push(R(n,T))}t.columnsFlat=i,delete t.columns}let o=new a("IMPORT_CSV_FROM_PATH",[e,r,t]);await this.postTask(o)}async insertJSONFromPath(e,r,t){if(t.columns!==void 0){let i=[];for(let n in t.columns){let T=t.columns[n];i.push(R(n,T))}t.columnsFlat=i,delete t.columns}let o=new a("IMPORT_JSON_FROM_PATH",[e,r,t]);await this.postTask(o)}shouldOPFSFileHandling(){var e,r;return L((e=this.config.path)!=null?e:"")?((r=this.config.opfs)==null?void 0:r.fileHandling)=="auto":!1}async registerOPFSFileFromSQL(e){let r=F(e),t=[];for(let o of r)try{await this.registerOPFSFileName(o),t.push(o)}catch(i){throw console.error(i),new Error("File Not found:"+o)}return t}};function le(){let s=new TextDecoder;return e=>(typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&(e=new Uint8Array(e)),s.decode(e))}var Be=le();var w=(n=>(n[n.BUFFER=0]="BUFFER",n[n.NODE_FS=1]="NODE_FS",n[n.BROWSER_FILEREADER=2]="BROWSER_FILEREADER",n[n.BROWSER_FSACCESS=3]="BROWSER_FSACCESS",n[n.HTTP=4]="HTTP",n[n.S3=5]="S3",n))(w||{});var C=class{constructor(){this._bindings=null;this._nextMessageId=0}log(e){this.postMessage({messageId:this._nextMessageId++,requestId:0,type:"LOG",data:e},[])}sendOK(e){this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"OK",data:null},[])}failWith(e,r){let t={name:r.name,message:r.message,stack:r.stack||void 0};this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"ERROR",data:t},[])}async onMessage(e){switch(e.type){case"PING":this.sendOK(e);return;case"INSTANTIATE":this._bindings!=null&&this.failWith(e,new Error("duckdb already initialized"));try{this._bindings=await this.instantiate(e.data[0],e.data[1],r=>{this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"INSTANTIATE_PROGRESS",data:r},[])}),this.sendOK(e)}catch(r){console.log(r),this._bindings=null,this.failWith(e,r)}return;default:break}if(!this._bindings)return this.failWith(e,new Error("duckdb is not initialized"));try{switch(e.type){case"GET_VERSION":this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"VERSION_STRING",data:this._bindings.getVersion()},[]);break;case"GET_FEATURE_FLAGS":this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"FEATURE_FLAGS",data:this._bindings.getFeatureFlags()},[]);break;case"RESET":this._bindings.reset(),this.sendOK(e);break;case"OPEN":{let r=e.data.path;r!=null&&r.startsWith("opfs://")&&(await this._bindings.prepareDBFileHandle(r,3),e.data.useDirectIO=!0),this._bindings.open(e.data),this.sendOK(e);break}case"DROP_FILE":this._bindings.dropFile(e.data),this.sendOK(e);break;case"DROP_FILES":this._bindings.dropFiles(e.data),this.sendOK(e);break;case"FLUSH_FILES":this._bindings.flushFiles(),this.sendOK(e);break;case"CONNECT":{let r=this._bindings.connect();this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"CONNECTION_INFO",data:r.useUnsafe((t,o)=>o)},[]);break}case"DISCONNECT":this._bindings.disconnect(e.data),this.sendOK(e);break;case"CREATE_PREPARED":{let r=this._bindings.createPrepared(e.data[0],e.data[1]);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"PREPARED_STATEMENT_ID",data:r},[]);break}case"CLOSE_PREPARED":{this._bindings.closePrepared(e.data[0],e.data[1]),this.sendOK(e);break}case"RUN_PREPARED":{let r=this._bindings.runPrepared(e.data[0],e.data[1],e.data[2]);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT",data:r},[r.buffer]);break}case"RUN_QUERY":{let r=this._bindings.runQuery(e.data[0],e.data[1]);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT",data:r},[r.buffer]);break}case"SEND_PREPARED":{let r=this._bindings.sendPrepared(e.data[0],e.data[1],e.data[2]);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT_HEADER",data:r},[r.buffer]);break}case"START_PENDING_QUERY":{let r=this._bindings.startPendingQuery(e.data[0],e.data[1],e.data[2]),t=[];r&&t.push(r.buffer),this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT_HEADER_OR_NULL",data:r},t);break}case"POLL_PENDING_QUERY":{let r=this._bindings.pollPendingQuery(e.data),t=[];r&&t.push(r.buffer),this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT_HEADER_OR_NULL",data:r},t);break}case"CANCEL_PENDING_QUERY":{let r=this._bindings.cancelPendingQuery(e.data);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"SUCCESS",data:r},[]);break}case"FETCH_QUERY_RESULTS":{let r=this._bindings.fetchQueryResults(e.data),t=r?[r.buffer]:[];this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"QUERY_RESULT_CHUNK",data:r},t);break}case"GET_TABLE_NAMES":{let r=this._bindings.getTableNames(e.data[0],e.data[1]);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"TABLE_NAMES",data:r},[]);break}case"GLOB_FILE_INFOS":{let r=this._bindings.globFiles(e.data);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"FILE_INFOS",data:r},[]);break}case"REGISTER_FILE_URL":this._bindings.registerFileURL(e.data[0],e.data[1],e.data[2],e.data[3]),this.sendOK(e);break;case"REGISTER_FILE_BUFFER":this._bindings.registerFileBuffer(e.data[0],e.data[1]),this.sendOK(e);break;case"REGISTER_FILE_HANDLE":await this._bindings.registerFileHandleAsync(e.data[0],e.data[1],e.data[2],e.data[3]),this.sendOK(e);break;case"COPY_FILE_TO_PATH":this._bindings.copyFileToPath(e.data[0],e.data[1]),this.sendOK(e);break;case"COPY_FILE_TO_BUFFER":{let r=this._bindings.copyFileToBuffer(e.data);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"FILE_BUFFER",data:r},[]);break}case"COLLECT_FILE_STATISTICS":this._bindings.collectFileStatistics(e.data[0],e.data[1]),this.sendOK(e);break;case"REGISTER_OPFS_FILE_NAME":await this._bindings.registerOPFSFileName(e.data[0]),this.sendOK(e);break;case"EXPORT_FILE_STATISTICS":{this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"FILE_STATISTICS",data:this._bindings.exportFileStatistics(e.data)},[]);break}case"INSERT_ARROW_FROM_IPC_STREAM":{this._bindings.insertArrowFromIPCStream(e.data[0],e.data[1],e.data[2]),this.sendOK(e);break}case"IMPORT_CSV_FROM_PATH":{this._bindings.insertCSVFromPath(e.data[0],e.data[1],e.data[2]),this.sendOK(e);break}case"IMPORT_JSON_FROM_PATH":{this._bindings.insertJSONFromPath(e.data[0],e.data[1],e.data[2]),this.sendOK(e);break}case"TOKENIZE":{let r=this._bindings.tokenize(e.data);this.postMessage({messageId:this._nextMessageId++,requestId:e.messageId,type:"SCRIPT_TOKENS",data:r},[]);break}}}catch(r){return console.log(r),this.failWith(e,r)}}};var U=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),W=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11]));var v=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var B=()=>(async s=>{try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(s)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]));var m={name:"@duckdb/duckdb-wasm",version:"1.32.0",description:"DuckDB powered by WebAssembly",license:"MIT",repository:{type:"git",url:"https://github.com/duckdb/duckdb-wasm.git"},keywords:["sql","duckdb","relational","database","data","query","wasm","analytics","olap","arrow","parquet","json","csv"],dependencies:{"apache-arrow":"^17.0.0"},devDependencies:{"@types/emscripten":"^1.39.10","@types/jasmine":"^5.1.4","@typescript-eslint/eslint-plugin":"^6.21.0","@typescript-eslint/parser":"^6.21.0",esbuild:"^0.20.2",eslint:"^8.57.0","eslint-plugin-jasmine":"^4.1.3","eslint-plugin-react":"^7.34.0","fast-glob":"^3.3.2",jasmine:"^5.1.0","jasmine-core":"^5.1.2","jasmine-spec-reporter":"^7.0.0","js-sha256":"^0.11.1",karma:"^6.4.2","karma-chrome-launcher":"^3.2.0","karma-coverage":"^2.2.1","karma-firefox-launcher":"^2.1.3","karma-jasmine":"^5.1.0","karma-jasmine-html-reporter":"^2.1.0","karma-sourcemap-loader":"^0.4.0","karma-spec-reporter":"^0.0.36","make-dir":"^4.0.0",nyc:"^15.1.0",prettier:"^3.2.5",puppeteer:"^22.8.0",rimraf:"^5.0.5",s3rver:"^3.7.1",typedoc:"^0.25.13",typescript:"^5.3.3","wasm-feature-detect":"^1.6.1","web-worker":"^1.2.0"},scripts:{"build:debug":"node bundle.mjs debug && tsc --emitDeclarationOnly","build:release":"node bundle.mjs release && tsc --emitDeclarationOnly",docs:"typedoc",format:'prettier --write "**/*.+(js|ts)"',report:"node ./coverage.mjs","test:node":"node --enable-source-maps ../../node_modules/jasmine/bin/jasmine ./dist/tests-node.cjs","test:node:debug":"node --inspect-brk --enable-source-maps ../../node_modules/jasmine/bin/jasmine ./dist/tests-node.cjs","test:node:coverage":"nyc -r json --report-dir ./coverage/node node ../../node_modules/jasmine/bin/jasmine ./dist/tests-node.cjs","test:firefox":"karma start ./karma/tests-firefox.cjs","test:chrome":"karma start ./karma/tests-chrome.cjs","test:chrome:eh":"karma start ./karma/tests-chrome-eh.cjs","test:chrome:coverage":"karma start ./karma/tests-chrome-coverage.cjs","test:browser":"karma start ./karma/tests-all.cjs","test:browser:debug":"karma start ./karma/tests-debug.cjs",test:"npm run test:chrome && npm run test:node","test:coverage":"npm run test:chrome:coverage && npm run test:node:coverage && npm run report",lint:"eslint src test"},files:["dist","!dist/tests-*","!dist/duckdb-browser-mvp.worker.js.map","!dist/types/test"],main:"dist/duckdb-browser.cjs",module:"dist/duckdb-browser.mjs",types:"dist/duckdb-browser.d.ts",jsdelivr:"dist/duckdb-browser.cjs",unpkg:"dist/duckdb-browser.mjs",sideEffects:!1,browser:{fs:!1,path:!1,perf_hooks:!1,os:!1,worker_threads:!1},exports:{"./dist/duckdb-mvp.wasm":"./dist/duckdb-mvp.wasm","./dist/duckdb-eh.wasm":"./dist/duckdb-eh.wasm","./dist/duckdb-coi.wasm":"./dist/duckdb-coi.wasm","./dist/duckdb-browser":"./dist/duckdb-browser.mjs","./dist/duckdb-browser.cjs":"./dist/duckdb-browser.cjs","./dist/duckdb-browser.mjs":"./dist/duckdb-browser.mjs","./dist/duckdb-browser-coi.pthread.worker.js":"./dist/duckdb-browser-coi.pthread.worker.js","./dist/duckdb-browser-coi.worker.js":"./dist/duckdb-browser-coi.worker.js","./dist/duckdb-browser-eh.worker.js":"./dist/duckdb-browser-eh.worker.js","./dist/duckdb-browser-mvp.worker.js":"./dist/duckdb-browser-mvp.worker.js","./dist/duckdb-node":"./dist/duckdb-node.cjs","./dist/duckdb-node.cjs":"./dist/duckdb-node.cjs","./dist/duckdb-node-blocking":"./dist/duckdb-node-blocking.cjs","./dist/duckdb-node-blocking.cjs":"./dist/duckdb-node-blocking.cjs","./dist/duckdb-node-eh.worker.cjs":"./dist/duckdb-node-eh.worker.cjs","./dist/duckdb-node-mvp.worker.cjs":"./dist/duckdb-node-mvp.worker.cjs","./blocking":{node:{types:"./dist/duckdb-node-blocking.d.ts",require:"./dist/duckdb-node-blocking.cjs",import:"./dist/duckdb-node-blocking.cjs"},types:"./dist/duckdb-node-blocking.d.ts",import:"./dist/duckdb-node-blocking.mjs",require:"./dist/duckdb-node-blocking.cjs"},".":{browser:{types:"./dist/duckdb-browser.d.ts",import:"./dist/duckdb-browser.mjs",require:"./dist/duckdb-browser.cjs"},node:{types:"./dist/duckdb-node.d.ts",import:"./dist/duckdb-node.cjs",require:"./dist/duckdb-node.cjs"},types:"./dist/duckdb-browser.d.ts",import:"./dist/duckdb-browser.mjs",require:"./dist/duckdb-browser.cjs"}}};var M=m.name,G=m.version,I=m.version.split("."),He=I[0],qe=I[1],Ye=I[2];var x=()=>typeof navigator>"u",Q=()=>x()?"node":navigator.userAgent,Ve=()=>Q().includes("Firefox"),ze=()=>/^((?!chrome|android).)*safari/i.test(Q());function Je(){let s="https://cdn.jsdelivr.net/npm/".concat(M,"@").concat(G,"/dist/");return{mvp:{mainModule:"".concat(s,"duckdb-mvp.wasm"),mainWorker:"".concat(s,"duckdb-browser-mvp.worker.js")},eh:{mainModule:"".concat(s,"duckdb-eh.wasm"),mainWorker:"".concat(s,"duckdb-browser-eh.worker.js")}}}var k=null,y=null,g=null,S=null,h=null;async function pe(){return k==null&&(k=typeof BigInt64Array<"u"),y==null&&(y=await W()),g==null&&(g=await B()),S==null&&(S=await v()),h==null&&(h=await U()),{bigInt64Array:k,crossOriginIsolated:x()||globalThis.crossOriginIsolated||!1,wasmExceptions:y,wasmSIMD:S,wasmThreads:g,wasmBulkMemory:h}}async function Xe(s){let e=await pe();if(e.wasmExceptions){if(e.wasmSIMD&&e.wasmThreads&&e.crossOriginIsolated&&s.coi)return{mainModule:s.coi.mainModule,mainWorker:s.coi.mainWorker,pthreadWorker:s.coi.pthreadWorker};if(s.eh)return{mainModule:s.eh.mainModule,mainWorker:s.eh.mainWorker,pthreadWorker:null}}return{mainModule:s.mvp.mainModule,mainWorker:s.mvp.mainWorker,pthreadWorker:null}}var Y=Z(q());async function er(s){let e=new Request(s),r=await fetch(e),t=URL.createObjectURL(await r.blob());return new Y.default(t)}export{f as AsyncDuckDB,E as AsyncDuckDBConnection,C as AsyncDuckDBDispatcher,b as AsyncPreparedStatement,p as AsyncResultStreamIterator,A as ConsoleLogger,ee as DuckDBAccessMode,w as DuckDBDataProtocol,ge as IsArrowBuffer,Se as IsDuckDBWasmRetry,ne as LogEvent,te as LogLevel,oe as LogOrigin,se as LogTopic,M as PACKAGE_NAME,G as PACKAGE_VERSION,He as PACKAGE_VERSION_MAJOR,qe as PACKAGE_VERSION_MINOR,Ye as PACKAGE_VERSION_PATCH,ie as StatusCode,re as TokenType,N as VoidLogger,D as WorkerRequestType,O as WorkerResponseType,a as WorkerTask,er as createWorker,Je as getJsDelivrBundles,be as getLogEventLabel,Te as getLogLevelLabel,ke as getLogOriginLabel,Ie as getLogTopicLabel,pe as getPlatformFeatures,Ve as isFirefox,x as isNode,ze as isSafari,Xe as selectBundle};
2
+ //# sourceMappingURL=duckdb-browser.mjs.map
Binary file
Binary file
Binary file
package/assets/index.html CHANGED
@@ -14,11 +14,12 @@
14
14
 
15
15
  <!-- Favicon - database icon in gradient rounded square -->
16
16
  <link rel="icon" type="image/svg+xml" href="./logo/favicon.svg">
17
- <script type="module" crossorigin src="./assets/index-BZdWDIbu.js"></script>
18
- <link rel="modulepreload" crossorigin href="./assets/react-vendor-CJNQXC79.js">
19
- <link rel="modulepreload" crossorigin href="./assets/monaco-editor-DbSHhIAW.js">
17
+ <script type="module" crossorigin src="./assets/main-CyH5V7SF.js"></script>
18
+ <link rel="modulepreload" crossorigin href="./assets/oauth-constants-m7PlKcMR.js">
19
+ <link rel="modulepreload" crossorigin href="./assets/react-vendor-B2Ij4Vfr.js">
20
+ <link rel="modulepreload" crossorigin href="./assets/monaco-editor-CbzSR0rd.js">
20
21
  <link rel="stylesheet" crossorigin href="./assets/monaco-editor-DvqauXKu.css">
21
- <link rel="stylesheet" crossorigin href="./assets/index-Bls2JT31.css">
22
+ <link rel="stylesheet" crossorigin href="./assets/main-CiZpADZR.css">
22
23
  </head>
23
24
  <body>
24
25
  <div id="root"></div>
@@ -0,0 +1,57 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Authenticating…</title>
7
+ <style>
8
+ body {
9
+ font-family:
10
+ -apple-system,
11
+ BlinkMacSystemFont,
12
+ "Segoe UI",
13
+ sans-serif;
14
+ background: #1a1a1a;
15
+ color: #fff;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ min-height: 100vh;
20
+ margin: 0;
21
+ padding: 24px;
22
+ text-align: center;
23
+ }
24
+ .box {
25
+ max-width: 360px;
26
+ }
27
+ #spinner {
28
+ width: 40px;
29
+ height: 40px;
30
+ border: 3px solid #444;
31
+ border-top-color: #29b5e8;
32
+ border-radius: 50%;
33
+ animation: spin 0.8s linear infinite;
34
+ margin: 0 auto 16px;
35
+ }
36
+ @keyframes spin {
37
+ to {
38
+ transform: rotate(360deg);
39
+ }
40
+ }
41
+ .success {
42
+ color: #29b5e8;
43
+ }
44
+ .error {
45
+ color: #ff6b6b;
46
+ }
47
+ </style>
48
+ <script type="module" crossorigin src="./assets/oauth-callback-BSauVj6P.js"></script>
49
+ <link rel="modulepreload" crossorigin href="./assets/oauth-constants-m7PlKcMR.js">
50
+ </head>
51
+ <body>
52
+ <div class="box">
53
+ <div id="spinner"></div>
54
+ <p id="status">Completing authentication…</p>
55
+ </div>
56
+ </body>
57
+ </html>
package/dist/cli.js CHANGED
@@ -160,12 +160,22 @@ function findAssetsDir() {
160
160
  const ASSETS_DIR = findAssetsDir();
161
161
  console.log(`Assets directory: ${ASSETS_DIR}`);
162
162
 
163
+ // SPA-route prefixes that map to actual on-disk asset folders. Any path
164
+ // outside these prefixes that doesn't resolve to a file falls back to
165
+ // index.html so the React router can handle it (mirrors the Vercel rewrite).
166
+ const ASSET_PREFIXES = ['/assets/', '/duckdb/', '/sql-templates/', '/logo/', '/screenshots/'];
167
+ const ASSET_FILES = ['/robots.txt', '/sitemap.xml', '/favicon.ico'];
168
+
169
+ function isAssetPath(urlPath) {
170
+ return ASSET_PREFIXES.some(p => urlPath.startsWith(p)) || ASSET_FILES.includes(urlPath);
171
+ }
172
+
163
173
  // Create asset server
164
174
  const server = createServer((req, res) => {
165
175
  let urlPath = req.url.split('?')[0];
166
176
  if (urlPath === '/') urlPath = '/index.html';
167
177
 
168
- const filePath = join(ASSETS_DIR, urlPath);
178
+ let filePath = join(ASSETS_DIR, urlPath);
169
179
 
170
180
  // Security: prevent directory traversal
171
181
  if (!filePath.startsWith(ASSETS_DIR)) {
@@ -175,10 +185,18 @@ const server = createServer((req, res) => {
175
185
  }
176
186
 
177
187
  try {
178
- if (!existsSync(filePath) || statSync(filePath).isDirectory()) {
179
- res.writeHead(404, { 'Content-Type': 'text/plain', 'Content-Length': 9 });
180
- res.end('Not found');
181
- return;
188
+ const missing = !existsSync(filePath) || statSync(filePath).isDirectory();
189
+ if (missing) {
190
+ // SPA fallback: non-asset routes (e.g. /examples, /screenshots-page)
191
+ // serve index.html so the React router can handle them. True asset
192
+ // misses (under /assets/, /duckdb/, etc.) still 404.
193
+ if (!isAssetPath(urlPath) && urlPath !== '/index.html') {
194
+ filePath = join(ASSETS_DIR, 'index.html');
195
+ } else {
196
+ res.writeHead(404, { 'Content-Type': 'text/plain', 'Content-Length': 9 });
197
+ res.end('Not found');
198
+ return;
199
+ }
182
200
  }
183
201
 
184
202
  const content = readFileSync(filePath);
package/package.json CHANGED
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "name": "dbxlite-ui",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Local UI for DuckDB - replaces duckdb -ui with dbxlite",
5
+ "homepage": "https://github.com/hfmsio/dbxlite",
6
+ "bugs": "https://github.com/hfmsio/dbxlite/issues",
5
7
  "type": "module",
6
8
  "bin": {
7
9
  "dbxlite-ui": "./dist/cli.js"
@@ -26,7 +28,7 @@
26
28
  "license": "MIT",
27
29
  "repository": {
28
30
  "type": "git",
29
- "url": "https://github.com/hfmio/dbxlite"
31
+ "url": "git+https://github.com/hfmsio/dbxlite.git"
30
32
  },
31
33
  "engines": {
32
34
  "node": ">=18"