tabulark 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -2
- package/README.md +125 -42
- package/dist/client.d.ts +71 -2
- package/dist/errors.d.ts +7 -1
- package/dist/experimental.js +1 -1
- package/dist/experimental.js.map +2 -2
- package/dist/http.d.ts +65 -0
- package/dist/http.js +2 -0
- package/dist/http.js.map +7 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +4 -4
- package/dist/model.d.ts +6 -3
- package/dist/protocol.d.ts +3 -3
- package/dist/range-cache.d.ts +24 -5
- package/dist/range-source.d.ts +64 -0
- package/dist/rpc-client.d.ts +15 -2
- package/dist/source.d.ts +13 -0
- package/dist/view/canvas-table-view-public.d.ts +6 -0
- package/dist/view/canvas-table-view.d.ts +8 -0
- package/dist/wasm/arrow/tabulark_arrow.d.ts +33 -6
- package/dist/wasm/arrow/tabulark_arrow.js +129 -17
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm +0 -0
- package/dist/wasm/arrow/tabulark_arrow_bg.wasm.d.ts +6 -1
- package/dist/wasm/delimited/tabulark_delimited.d.ts +31 -5
- package/dist/wasm/delimited/tabulark_delimited.js +115 -8
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm +0 -0
- package/dist/wasm/delimited/tabulark_delimited_bg.wasm.d.ts +6 -1
- package/dist/wasm/excel/tabulark_excel.d.ts +33 -8
- package/dist/wasm/excel/tabulark_excel.js +129 -19
- package/dist/wasm/excel/tabulark_excel_bg.wasm +0 -0
- package/dist/wasm/excel/tabulark_excel_bg.wasm.d.ts +6 -1
- package/dist/wasm/parquet/tabulark_parquet.d.ts +31 -6
- package/dist/wasm/parquet/tabulark_parquet.js +135 -17
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm +0 -0
- package/dist/wasm/parquet/tabulark_parquet_bg.wasm.d.ts +6 -1
- package/dist/worker/blob-source-accessor.d.ts +10 -0
- package/dist/worker/source-accessor.d.ts +76 -0
- package/dist/worker/wasm-adapter.d.ts +39 -38
- package/dist/worker-range-source.d.ts +1 -0
- package/dist/worker-range-source.js +2 -0
- package/dist/worker-range-source.js.map +7 -0
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +4 -4
- package/package.json +8 -1
package/dist/worker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var PROTOCOL_VERSION=3;var ADAPTER_API_VERSION=2;var BATCH_LAYOUT_VERSION=1;function isRecord(value){return typeof value==="object"&&value!==null}var TabularkError=class _TabularkError extends Error{code;retryable;details;constructor(code,message,options={}){super(message,{cause:options.cause});this.name="TabularkError";this.code=code;this.retryable=options.retryable??false;this.details=code==="RESOURCE_LIMIT"?normalizeResourceLimitDetails(options.details):options.details}static fromSerialized(error){return new _TabularkError(error.code,error.message,{retryable:error.retryable,details:error.details})}};function normalizeResourceLimitDetails(details){const raw=isRecord2(details)?details:{};const resource=typeof raw.resource==="string"&&raw.resource.length>0?raw.resource:typeof raw.resourceCategory==="string"&&raw.resourceCategory.length>0?raw.resourceCategory:inferResource(raw);if(isQuantity(raw.requiredBytes)&&isQuantity(raw.availableBytes)){return Object.freeze({...raw,resource})}if(isQuantity(raw.required)&&isQuantity(raw.available)){return Object.freeze({...raw,resource})}const byteLimit=firstQuantity(raw,["maxDecodedBytes","maxOutputBytes","maxMetadataBytes","maxBlockBytes","maxDisplayCellBytes","maxDisplayBytes","maxSourceBytes","maxFieldBytes","maxBatchBytes","maxOperationBytes","maxZipEntryBytes","maxZipUncompressedBytes","maxCfbStreamBytes"]);if(byteLimit!==void 0){const requiredBytes=firstQuantity(raw,["decodedBytes","outputBytes","metadataBytes","blockBytes","displayCellBytes","displayBytes","sourceBytes","fieldBytes","batchBytes","operationBytes"])??byteLimit+1;return Object.freeze({...raw,resource,requiredBytes,availableBytes:byteLimit})}const available=firstQuantity(raw,["limit","maxCells","maxRangeCells","maxSources","maxActiveRanges","maxRangeWaiters","maxColumns","maxFields","maxNestingDepth","maxWorksheetRows","maxWorksheetColumns","maxStyles","maxMergedRegions"])??0;const required=firstQuantity(raw,["cells","cellCount","visibleCellCount","sources","activeRanges","rangeWaiters","columns","fields","nestingDepth","worksheetRows","worksheetColumns","styles","mergedRegions"])??available+1;return Object.freeze({...raw,resource,required,available})}function inferResource(details){const keys=Object.keys(details).join(" ").toLowerCase();if(keys.includes("source"))return keys.includes("byte")?"source-staging":"source-slots";if(keys.includes("metadata"))return"metadata";if(keys.includes("decoded")||keys.includes("decompress"))return"decompression";if(keys.includes("display"))return"display-values";if(keys.includes("field"))return"field";if(keys.includes("batch"))return"batch";if(keys.includes("range")||keys.includes("cell"))return"range-cells";if(keys.includes("column"))return"columns";if(keys.includes("nest"))return"descriptor-nesting";if(keys.includes("worksheet"))return"worksheet-dimensions";return"adapter-resource"}function firstQuantity(details,names){for(const name of names){if(isQuantity(details[name]))return details[name]}return void 0}function isQuantity(value){return typeof value==="number"&&Number.isFinite(value)&&value>=0}function isRecord2(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function invalidArgument(message,details){return new TabularkError("INVALID_ARGUMENT",message,{details})}var DEFAULT_MEMORY_BUDGET_BYTES=256*1024*1024;var MAX_ARRAY_BUFFER_BYTES=128*1024*1024;var MAX_RANGE_CELLS=25e4;var DEFAULT_TO_ROWS_CELL_LIMIT=1e4;var MAX_NESTING_DEPTH=64;var INDEX_BUDGET_MAX_BYTES=64*1024*1024;var WORKER_RANGE_CACHE_MAX_BYTES=96*1024*1024;var MAIN_THREAD_RANGE_CACHE_MAX_BYTES=32*1024*1024;var FIELD_AND_BATCH_MAX_BYTES=8*1024*1024;var MAX_SOURCES=2;var MAX_ACTIVE_RANGES=2;var MAX_RANGE_WAITERS=8;function deriveMemoryBudgetLimits(memoryBudgetBytes){assertPositiveSafeInteger(memoryBudgetBytes,"memoryBudgetBytes");const oneEighth=Math.floor(memoryBudgetBytes/8);const oneThirtySecond=Math.floor(memoryBudgetBytes/32);const adapterRuntimePoolBytes=Math.max(1,Math.floor(memoryBudgetBytes/2));const operationBudgetBytes=Math.max(1,Math.floor(memoryBudgetBytes/8));const workerRangeCacheBytes=Math.min(WORKER_RANGE_CACHE_MAX_BYTES,Math.floor(memoryBudgetBytes/8*3));return Object.freeze({memoryBudgetBytes,adapterRuntimePoolBytes,operationBudgetBytes,indexBudgetBytes:Math.min(INDEX_BUDGET_MAX_BYTES,oneEighth),adapterTileCacheBudgetBytes:Math.min(WORKER_RANGE_CACHE_MAX_BYTES,operationBudgetBytes),workerRangeCacheBytes,workerDatasetRangeCacheBytes:Math.floor(workerRangeCacheBytes/MAX_SOURCES),mainThreadRangeCacheBytes:Math.min(MAIN_THREAD_RANGE_CACHE_MAX_BYTES,oneEighth),maxFieldBytes:Math.min(FIELD_AND_BATCH_MAX_BYTES,oneThirtySecond),maxBatchBytes:Math.min(FIELD_AND_BATCH_MAX_BYTES,oneThirtySecond),maxArrayBufferBytes:Math.min(MAX_ARRAY_BUFFER_BYTES,Math.floor(memoryBudgetBytes/2)),maxSources:MAX_SOURCES,maxActiveRanges:MAX_ACTIVE_RANGES,maxRangeWaiters:MAX_RANGE_WAITERS})}var MemoryReservationLedger=class{#capacityBytes;#usedBytes=0;constructor(capacityBytes){assertPositiveSafeInteger(capacityBytes,"capacityBytes");this.#capacityBytes=capacityBytes}get capacityBytes(){return this.#capacityBytes}get usedBytes(){return this.#usedBytes}get availableBytes(){return this.#capacityBytes-this.#usedBytes}reserve(resource,bytes){if(!Number.isSafeInteger(bytes)||bytes<0){throw invalidArgument("Reservation bytes must be a non-negative safe integer")}const availableBytes=this.availableBytes;if(bytes>availableBytes){throw new TabularkError("RESOURCE_LIMIT",`Insufficient memory reservation capacity for ${resource}`,{details:{resource,requiredBytes:bytes,availableBytes}})}this.#usedBytes+=bytes;let released=false;return Object.freeze({resource,bytes,release:()=>{if(released)return;released=true;this.#usedBytes-=bytes}})}};var ColumnarTableBatch=class{tableId;revision;schemaVersion;range;columns;complete;#buffers;#wireColumns;constructor(value){if(value.layoutVersion!==BATCH_LAYOUT_VERSION){throw invalidArgument(`Batch layout ${String(value.layoutVersion)} is incompatible with layout ${BATCH_LAYOUT_VERSION}`)}this.tableId=value.tableId;this.revision=value.revision;this.schemaVersion=value.schemaVersion;this.range=Object.freeze({...value.range});this.#buffers=Object.freeze(value.buffers.map(asUint8Array));this.#wireColumns=Object.freeze(value.columns.map(column=>freezeWireColumn(column)));this.complete=value.complete;validateWireBatch(this.range,this.#buffers,this.#wireColumns);this.columns=Object.freeze(this.#wireColumns.map((column,index)=>new LogicalBatchColumn(column,this.#buffers,this.range.rowCount,this.range.columnStart+index)))}toRows(options={}){const maxCells=normalizeCellLimit(options.maxCells);assertCellLimit(this.range.rowCount,this.columns.length,maxCells);const rows=Array.from({length:this.range.rowCount},()=>Array(this.columns.length));for(let columnIndex=0;columnIndex<this.columns.length;columnIndex+=1){for(let rowIndex=0;rowIndex<this.range.rowCount;rowIndex+=1){rows[rowIndex][columnIndex]=this.columns[columnIndex].getValue(rowIndex)}}return rows}toDisplayRows(options={}){const maxCells=normalizeCellLimit(options.maxCells);assertCellLimit(this.range.rowCount,this.columns.length,maxCells);const rows=Array.from({length:this.range.rowCount},()=>Array(this.columns.length));for(let columnIndex=0;columnIndex<this.columns.length;columnIndex+=1){for(let rowIndex=0;rowIndex<this.range.rowCount;rowIndex+=1){rows[rowIndex][columnIndex]=this.columns[columnIndex].getDisplayValue(rowIndex)}}return rows}};var LogicalBatchColumn=class{columnId;columnIndex;rowCount;#wire;#buffers;constructor(wire,buffers,rowCount,columnIndex){this.columnId=wire.columnId;this.columnIndex=columnIndex;this.rowCount=rowCount;this.#wire=wire;this.#buffers=buffers;Object.freeze(this)}getValue(rowOffset){assertBatchRowOffset(rowOffset,this.rowCount);return decodeNativeValue(this.#wire.native,rowOffset,this.#buffers,0)}getDisplayValue(rowOffset){assertBatchRowOffset(rowOffset,this.rowCount);return decodeDisplayValue(this.#wire.display,rowOffset,this.#buffers,this.columnId)}toValues(options={}){const maxCells=normalizeCellLimit(options.maxCells);assertCellLimit(this.rowCount,1,maxCells);return Array.from({length:this.rowCount},(_,index)=>this.getValue(index))}toDisplayValues(options={}){const maxCells=normalizeCellLimit(options.maxCells);assertCellLimit(this.rowCount,1,maxCells);return Array.from({length:this.rowCount},(_,index)=>this.getDisplayValue(index))}};function assertBatchRowOffset(rowOffset,rowCount){if(!Number.isSafeInteger(rowOffset)||rowOffset<0||rowOffset>=rowCount){throw invalidArgument(`Batch row offset must be an integer from 0 through ${Math.max(0,rowCount-1)}`)}}function decodeDisplayValue(display,rowOffset,buffers,columnId){const physicalIndex=(display.offset??0)+rowOffset;if(!validAt(display.validity,physicalIndex,buffers)){return null}const offsets=regionView(display.offsets,buffers,"display offsets");const data=regionView(display.data,buffers,"display data");const start=readUnsignedOffset(offsets,physicalIndex,4);const end=readUnsignedOffset(offsets,physicalIndex+1,4);if(end<start||end>data.byteLength){throw invalidArgument(`Column ${columnId} has invalid display offsets`)}return new TextDecoder().decode(data.subarray(start,end))}function validateRange(request){for(const[name,value]of Object.entries(request)){assertNonNegativeSafeInteger(value,name)}if(!Number.isSafeInteger(request.rowStart+request.rowCount)||!Number.isSafeInteger(request.columnStart+request.columnCount)){throw new TabularkError("INVALID_RANGE","Range end must be a safe integer")}const cells=request.rowCount*request.columnCount;if(!Number.isSafeInteger(cells)||cells>MAX_RANGE_CELLS){throw new TabularkError("RESOURCE_LIMIT",`A range may contain at most ${MAX_RANGE_CELLS} cells`,{details:{resource:"range-cells",required:cells,available:MAX_RANGE_CELLS,cells,limit:MAX_RANGE_CELLS}})}return Object.freeze({...request})}function normalizeDataType(value,depth=0){if(depth>=MAX_NESTING_DEPTH){throw invalidArgument(`Arrow data type nesting may not exceed ${MAX_NESTING_DEPTH}`)}if(!isRecord3(value)||typeof value.type!=="string"){throw invalidArgument("Column dataType must be a recursive Arrow data type descriptor")}const type={"u-int8":"uint8","u-int16":"uint16","u-int32":"uint32","u-int64":"uint64"}[value.type]??value.type;const simple=new Set(["unknown","null","boolean","int8","int16","int32","int64","uint8","uint16","uint32","uint64","float16","float32","float64","date32","date64","binary","large-binary","binary-view","utf8","large-utf8","utf8-view"]);if(simple.has(type)){return Object.freeze({type})}if(type==="timestamp"){return Object.freeze({type,unit:timeUnit(value.unit),...typeof value.timezone==="string"?{timezone:value.timezone}:{}})}if(type==="time32"||type==="time64"||type==="duration"){return Object.freeze({type,unit:timeUnit(value.unit)})}if(type==="interval"){return Object.freeze({type,unit:intervalUnit(value.unit)})}if(type==="fixed-size-binary"){return Object.freeze({type,byteWidth:positiveInteger(value.byteWidth??value.byte_width,"byteWidth")})}if(type==="decimal32"||type==="decimal64"||type==="decimal128"||type==="decimal256"){return Object.freeze({type,precision:positiveInteger(value.precision,"precision"),scale:integer(value.scale,"scale")})}if(type==="list"||type==="large-list"||type==="list-view"||type==="large-list-view"){return Object.freeze({type,field:normalizeField(value.field,depth+1)})}if(type==="fixed-size-list"){return Object.freeze({type,field:normalizeField(value.field,depth+1),listSize:positiveInteger(value.listSize??value.list_size,"listSize")})}if(type==="struct"){if(!Array.isArray(value.fields)){throw invalidArgument("Struct fields must be an array")}return Object.freeze({type,fields:Object.freeze(value.fields.map(field=>normalizeField(field,depth+1)))})}if(type==="union"){if(!Array.isArray(value.fields)||value.mode!=="sparse"&&value.mode!=="dense"){throw invalidArgument("Union dataType requires a mode and fields")}return Object.freeze({type,mode:value.mode,fields:Object.freeze(value.fields.map(entry=>{if(!isRecord3(entry)){throw invalidArgument("Union field entries must be objects")}return Object.freeze({typeId:integer(entry.typeId,"typeId"),field:normalizeField(entry.field,depth+1)})}))})}if(type==="dictionary"){return Object.freeze({type,indexType:normalizeDataType(value.indexType,depth+1),valueType:normalizeDataType(value.valueType,depth+1),...value.ordered===true?{ordered:true}:{}})}if(type==="map"){return Object.freeze({type,entries:normalizeField(value.entries,depth+1),keysSorted:value.keysSorted===true||value.keys_sorted===true})}if(type==="run-end-encoded"){return Object.freeze({type,runEnds:normalizeField(value.runEnds??value.run_ends,depth+1),values:normalizeField(value.values,depth+1)})}if(type==="extension"){if(typeof value.name!=="string"||value.name.length===0){throw invalidArgument("Arrow extension name must be a non-empty string")}return Object.freeze({type,name:value.name,...typeof value.metadata==="string"?{metadata:value.metadata}:{},storageType:normalizeDataType(value.storageType,depth+1)})}throw invalidArgument(`Unknown Arrow data type: ${type}`)}function normalizeField(value,depth){if(!isRecord3(value)){throw invalidArgument("Arrow field must be an object")}const metadata=isRecord3(value.metadata)?Object.freeze(Object.fromEntries(Object.entries(value.metadata).map(([key,entry])=>[key,String(entry)]))):void 0;return Object.freeze({name:typeof value.name==="string"?value.name:"",nullable:value.nullable!==false,dataType:normalizeDataType(value.dataType,depth),...metadata?{metadata}:{}})}function validateWireBatch(range,buffers,columns){validateRange(range);if(columns.length!==range.columnCount){throw invalidArgument(`Batch has ${columns.length} columns; expected ${range.columnCount}`)}for(const[index,column]of columns.entries()){validateDisplay(column.display,range.rowCount,buffers,column.columnId);validateNative(column.native,buffers,0,`columns[${index}].native`);if(column.native.length<range.rowCount){throw invalidArgument(`Column ${column.columnId} is shorter than the returned range`)}}}function validateDisplay(display,rows,buffers,columnId){const offset=display.offset??0;assertNonNegativeSafeInteger(offset,"display offset");const offsets=regionView(display.offsets,buffers,"display offsets");if(offsets.byteLength<(offset+rows+1)*4){throw invalidArgument(`Column ${columnId} has incomplete display offsets`)}const data=regionView(display.data,buffers,"display data");if(display.validity){const validity=regionView(display.validity,buffers,"display validity");if(validity.byteLength<Math.ceil((offset+rows)/8)){throw invalidArgument(`Column ${columnId} has an incomplete display validity bitmap`)}}let previous=0;for(let index=offset;index<=offset+rows;index+=1){const next=readUnsignedOffset(offsets,index,4);if(next<previous||next>data.byteLength){throw invalidArgument(`Column ${columnId} has invalid display offsets`)}previous=next}}function validateNative(descriptor,buffers,depth,name){if(depth>=MAX_NESTING_DEPTH){throw invalidArgument(`Native column nesting may not exceed ${MAX_NESTING_DEPTH}`)}assertNonNegativeSafeInteger(descriptor.length,`${name}.length`);assertNonNegativeSafeInteger(descriptor.offset??0,`${name}.offset`);normalizeDataType(descriptor.dataType,depth);const regions=[descriptor.validity,descriptor.values,descriptor.offsets,descriptor.sizes,descriptor.data,descriptor.typeIds,descriptor.unionOffsets,...descriptor.variadicBuffers??[]];for(const region of regions){if(region){regionView(region,buffers,name)}}for(const[index,child]of(descriptor.children??[]).entries()){validateNative(child,buffers,depth+1,`${name}.children[${index}]`)}if(descriptor.dictionary){validateNative(descriptor.dictionary,buffers,depth+1,`${name}.dictionary`)}if(descriptor.runEnds){validateNative(descriptor.runEnds,buffers,depth+1,`${name}.runEnds`)}}function decodeNativeValue(descriptor,logicalIndex,buffers,depth){if(depth>=MAX_NESTING_DEPTH){throw invalidArgument(`Native value nesting may not exceed ${MAX_NESTING_DEPTH}`)}if(logicalIndex<0||logicalIndex>=descriptor.length){throw invalidArgument("Native value index is outside its descriptor")}const physicalIndex=(descriptor.offset??0)+logicalIndex;if(!validAt(descriptor.validity,physicalIndex,buffers)){return null}const type=unwrapExtension(descriptor.dataType);switch(type.type){case"null":return null;case"unknown":{const bytes=decodeVariableBytes(descriptor,buffers,physicalIndex,4);return new TextDecoder().decode(bytes)}case"boolean":{const values=requiredRegion(descriptor.values,buffers,"boolean values");const bitIndex=(descriptor.values?.bitOffset??0)+physicalIndex;return(values[bitIndex>>>3]&1<<(bitIndex&7))!==0}case"int8":return readNumber(descriptor,buffers,physicalIndex,1,"signed");case"uint8":return readNumber(descriptor,buffers,physicalIndex,1,"unsigned");case"int16":return readNumber(descriptor,buffers,physicalIndex,2,"signed");case"uint16":return readNumber(descriptor,buffers,physicalIndex,2,"unsigned");case"int32":return readNumber(descriptor,buffers,physicalIndex,4,"signed");case"uint32":return readNumber(descriptor,buffers,physicalIndex,4,"unsigned");case"int64":return readBigInt(descriptor,buffers,physicalIndex,true);case"uint64":return readBigInt(descriptor,buffers,physicalIndex,false);case"float16":return decodeFloat16(readNumber(descriptor,buffers,physicalIndex,2,"unsigned"));case"float32":return readFloat(descriptor,buffers,physicalIndex,4);case"float64":return readFloat(descriptor,buffers,physicalIndex,8);case"utf8":case"large-utf8":{const bytes=decodeVariableBytes(descriptor,buffers,physicalIndex,type.type==="large-utf8"?8:4);return new TextDecoder().decode(bytes)}case"binary":case"large-binary":return decodeVariableBytes(descriptor,buffers,physicalIndex,type.type==="large-binary"?8:4).slice();case"utf8-view":return new TextDecoder().decode(decodeViewBytes(descriptor,buffers,physicalIndex));case"binary-view":return decodeViewBytes(descriptor,buffers,physicalIndex).slice();case"fixed-size-binary":{const data=requiredRegion(descriptor.data??descriptor.values,buffers,"fixed-size binary data");const start=physicalIndex*type.byteWidth;return checkedSlice(data,start,start+type.byteWidth,"fixed-size binary data").slice()}case"decimal32":case"decimal64":case"decimal128":case"decimal256":{const width={decimal32:4,decimal64:8,decimal128:16,decimal256:32}[type.type];return Object.freeze({kind:"decimal",unscaled:readSignedLittleEndian(requiredRegion(descriptor.values,buffers,"decimal values"),physicalIndex*width,width),precision:type.precision,scale:type.scale})}case"date32":return Object.freeze({kind:"date32",value:readNumber(descriptor,buffers,physicalIndex,4,"signed")});case"date64":return Object.freeze({kind:"date64",value:readBigInt(descriptor,buffers,physicalIndex,true),unit:"millisecond"});case"time32":return Object.freeze({kind:"time32",value:readNumber(descriptor,buffers,physicalIndex,4,"signed"),unit:type.unit});case"time64":return Object.freeze({kind:"time64",value:readBigInt(descriptor,buffers,physicalIndex,true),unit:type.unit});case"timestamp":return Object.freeze({kind:"timestamp",value:readBigInt(descriptor,buffers,physicalIndex,true),unit:type.unit,...type.timezone===void 0?{}:{timezone:type.timezone}});case"duration":return Object.freeze({kind:"duration",value:readBigInt(descriptor,buffers,physicalIndex,true),unit:type.unit});case"interval":return decodeInterval(descriptor,buffers,physicalIndex,type.unit);case"list":case"large-list":case"list-view":case"large-list-view":case"map":return decodeListLike(descriptor,buffers,physicalIndex,type,depth);case"fixed-size-list":{const child=requiredChild(descriptor,0,"fixed-size list");const start=physicalIndex*type.listSize;return Object.freeze(Array.from({length:type.listSize},(_,index)=>decodeNativeValue(child,start+index-(child.offset??0),buffers,depth+1)))}case"struct":{const result={};for(let index=0;index<type.fields.length;index+=1){const child=requiredChild(descriptor,index,"struct");result[type.fields[index].name]=decodeNativeValue(child,physicalIndex-(child.offset??0),buffers,depth+1)}return Object.freeze(result)}case"union":{const typeIds=requiredRegion(descriptor.typeIds,buffers,"union type ids");if(physicalIndex>=typeIds.byteLength){throw invalidArgument("Union type id is out of bounds")}const typeId=new DataView(typeIds.buffer,typeIds.byteOffset,typeIds.byteLength).getInt8(physicalIndex);const fieldIndex=type.fields.findIndex(entry=>entry.typeId===typeId);if(fieldIndex<0){throw invalidArgument(`Union type id ${typeId} has no child`)}const child=requiredChild(descriptor,fieldIndex,"union");const childPhysical=type.mode==="dense"?readSignedOffset(requiredRegion(descriptor.unionOffsets??descriptor.offsets,buffers,"union offsets"),physicalIndex,4):physicalIndex;return Object.freeze({kind:"union",typeId,value:decodeNativeValue(child,childPhysical-(child.offset??0),buffers,depth+1)})}case"dictionary":{const keys=descriptor.children?.[0]??descriptor;const dictionary=descriptor.dictionary??descriptor.children?.[1];if(!dictionary||!keys){throw invalidArgument("Dictionary descriptor has no dictionary values")}const index=readIndex(keys,buffers,physicalIndex,type.indexType);if(index<0||index>=dictionary.length){throw invalidArgument("Dictionary index is out of bounds")}return decodeNativeValue(dictionary,index,buffers,depth+1)}case"run-end-encoded":{const runEnds=descriptor.runEnds??descriptor.children?.[0];const values=descriptor.children?.[descriptor.runEnds?0:1];if(!runEnds||!values){throw invalidArgument("Run-end encoded descriptor is incomplete")}const logicalPosition=physicalIndex+1;let run=0;while(run<runEnds.length&&numericIndexValue(runEnds,buffers,run)<logicalPosition){run+=1}if(run>=values.length){throw invalidArgument("Run-end encoded value is out of bounds")}return decodeNativeValue(values,run,buffers,depth+1)}case"extension":throw invalidArgument("Nested extension data type could not be unwrapped")}}function decodeListLike(descriptor,buffers,physicalIndex,type,depth){const width=type.type==="large-list"||type.type==="large-list-view"?8:4;const offsets=requiredRegion(descriptor.offsets,buffers,"list offsets");const start=readSignedOffset(offsets,physicalIndex,width);const end=type.type==="list-view"||type.type==="large-list-view"?start+readSignedOffset(requiredRegion(descriptor.sizes,buffers,"list sizes"),physicalIndex,width):readSignedOffset(offsets,physicalIndex+1,width);if(start<0||end<start){throw invalidArgument("List offsets are invalid")}const child=requiredChild(descriptor,0,type.type);const values=Object.freeze(Array.from({length:end-start},(_,index)=>decodeNativeValue(child,start+index-(child.offset??0),buffers,depth+1)));if(type.type!=="map"){return values}return Object.freeze(values.map(entry=>{if(!isRecord3(entry)){throw invalidArgument("Map entries must decode from a struct")}const record=entry;const entryType=type.entries.dataType;const fields=entryType.type==="struct"?entryType.fields:[];const keyName=fields[0]?.name??"key";const valueName=fields[1]?.name??"value";return Object.freeze({key:record[keyName]??null,value:record[valueName]??null})}))}function decodeInterval(descriptor,buffers,index,unit){const values=requiredRegion(descriptor.values,buffers,"interval values");const view=new DataView(values.buffer,values.byteOffset,values.byteLength);if(unit==="year-month"){ensureViewRange(view,index*4,4,"year-month interval");return Object.freeze({kind:"interval",unit,months:view.getInt32(index*4,true)})}if(unit==="day-time"){const offset2=index*8;ensureViewRange(view,offset2,8,"day-time interval");return Object.freeze({kind:"interval",unit,days:view.getInt32(offset2,true),milliseconds:view.getInt32(offset2+4,true)})}const offset=index*16;ensureViewRange(view,offset,16,"month-day-nano interval");return Object.freeze({kind:"interval",unit,months:view.getInt32(offset,true),days:view.getInt32(offset+4,true),nanoseconds:view.getBigInt64(offset+8,true)})}function decodeVariableBytes(descriptor,buffers,index,offsetWidth){const offsets=requiredRegion(descriptor.offsets,buffers,"variable offsets");const data=requiredRegion(descriptor.data??descriptor.values,buffers,"variable data");const start=readUnsignedOffset(offsets,index,offsetWidth);const end=readUnsignedOffset(offsets,index+1,offsetWidth);return checkedSlice(data,start,end,"variable data")}function decodeViewBytes(descriptor,buffers,index){const views=requiredRegion(descriptor.values,buffers,"view values");const view=new DataView(views.buffer,views.byteOffset,views.byteLength);const offset=index*16;ensureViewRange(view,offset,16,"view value");const length=view.getInt32(offset,true);if(length<0){throw invalidArgument("View length must be non-negative")}if(length<=12){return checkedSlice(views,offset+4,offset+4+length,"inline view")}const bufferIndex=view.getInt32(offset+8,true);const dataOffset=view.getInt32(offset+12,true);const data=descriptor.variadicBuffers?.[bufferIndex];if(!data||dataOffset<0){throw invalidArgument("View references an invalid variadic buffer")}return checkedSlice(regionView(data,buffers,"view data"),dataOffset,dataOffset+length,"view data")}function readNumber(descriptor,buffers,index,width,signedness){const values=requiredRegion(descriptor.values,buffers,"numeric values");const view=new DataView(values.buffer,values.byteOffset,values.byteLength);const offset=index*width;ensureViewRange(view,offset,width,"numeric value");if(width===1)return signedness==="signed"?view.getInt8(offset):view.getUint8(offset);if(width===2)return signedness==="signed"?view.getInt16(offset,true):view.getUint16(offset,true);return signedness==="signed"?view.getInt32(offset,true):view.getUint32(offset,true)}function readFloat(descriptor,buffers,index,width){const values=requiredRegion(descriptor.values,buffers,"floating-point values");const view=new DataView(values.buffer,values.byteOffset,values.byteLength);const offset=index*width;ensureViewRange(view,offset,width,"floating-point value");return width===4?view.getFloat32(offset,true):view.getFloat64(offset,true)}function readBigInt(descriptor,buffers,index,signed){const values=requiredRegion(descriptor.values,buffers,"64-bit values");const view=new DataView(values.buffer,values.byteOffset,values.byteLength);const offset=index*8;ensureViewRange(view,offset,8,"64-bit value");return signed?view.getBigInt64(offset,true):view.getBigUint64(offset,true)}function readIndex(descriptor,buffers,index,dataType){const type=unwrapExtension(dataType).type;let value;if(type==="int8")value=readNumber(descriptor,buffers,index,1,"signed");else if(type==="uint8")value=readNumber(descriptor,buffers,index,1,"unsigned");else if(type==="int16")value=readNumber(descriptor,buffers,index,2,"signed");else if(type==="uint16")value=readNumber(descriptor,buffers,index,2,"unsigned");else if(type==="int32")value=readNumber(descriptor,buffers,index,4,"signed");else if(type==="uint32")value=readNumber(descriptor,buffers,index,4,"unsigned");else if(type==="int64")value=readBigInt(descriptor,buffers,index,true);else if(type==="uint64")value=readBigInt(descriptor,buffers,index,false);else throw invalidArgument("Dictionary index type must be an integer");const numeric=typeof value==="bigint"?Number(value):value;if(!Number.isSafeInteger(numeric)){throw invalidArgument("Dictionary index exceeds the JavaScript safe integer range")}return numeric}function numericIndexValue(descriptor,buffers,index){const type=unwrapExtension(descriptor.dataType);return readIndex({...descriptor,dataType:{type:"dictionary",indexType:type,valueType:{type:"null"}}},buffers,index,type)}function readSignedLittleEndian(bytes,offset,width){const slice=checkedSlice(bytes,offset,offset+width,"signed integer");let value=0n;for(let index=slice.byteLength-1;index>=0;index-=1){value=value<<8n|BigInt(slice[index])}const sign=1n<<BigInt(width*8-1);return(value&sign)===0n?value:value-(1n<<BigInt(width*8))}function readUnsignedOffset(bytes,index,width){const value=readOffset(bytes,index,width,false);if(value<0){throw invalidArgument("Offset must be non-negative")}return value}function readSignedOffset(bytes,index,width){return readOffset(bytes,index,width,true)}function readOffset(bytes,index,width,signed){const view=new DataView(bytes.buffer,bytes.byteOffset,bytes.byteLength);const offset=index*width;ensureViewRange(view,offset,width,"offset");const value=width===4?signed?view.getInt32(offset,true):view.getUint32(offset,true):signed?view.getBigInt64(offset,true):view.getBigUint64(offset,true);const numeric=typeof value==="bigint"?Number(value):value;if(!Number.isSafeInteger(numeric)){throw invalidArgument("Offset exceeds the JavaScript safe integer range")}return numeric}function validAt(validity,index,buffers){if(!validity)return true;const bitmap=regionView(validity,buffers,"validity bitmap");const bitIndex=(validity.bitOffset??0)+index;if(bitIndex<0||bitIndex>>>3>=bitmap.byteLength){throw invalidArgument("Validity bitmap index is out of bounds")}return(bitmap[bitIndex>>>3]&1<<(bitIndex&7))!==0}function requiredRegion(region,buffers,name){if(!region)throw invalidArgument(`${name} are missing`);return regionView(region,buffers,name)}function regionView(region,buffers,name){if(!isRecord3(region)||!Number.isSafeInteger(region.buffer)||region.buffer<0){throw invalidArgument(`${name} references an invalid buffer`)}const buffer=buffers[region.buffer];if(!buffer)throw invalidArgument(`${name} references a missing buffer`);const byteOffset=region.byteOffset??0;const byteLength=region.byteLength??buffer.byteLength-byteOffset;if(!Number.isSafeInteger(byteOffset)||byteOffset<0||!Number.isSafeInteger(byteLength)||byteLength<0||byteOffset+byteLength>buffer.byteLength){throw invalidArgument(`${name} region is outside its buffer`)}return buffer.subarray(byteOffset,byteOffset+byteLength)}function requiredChild(descriptor,index,name){const child=descriptor.children?.[index];if(!child)throw invalidArgument(`${name} descriptor has no child ${index}`);return child}function checkedSlice(bytes,start,end,name){if(!Number.isSafeInteger(start)||!Number.isSafeInteger(end)||start<0||end<start||end>bytes.byteLength){throw invalidArgument(`${name} slice is out of bounds`)}return bytes.subarray(start,end)}function ensureViewRange(view,offset,width,name){if(offset<0||offset+width>view.byteLength){throw invalidArgument(`${name} is out of bounds`)}}function unwrapExtension(dataType){let current=dataType;for(let depth=0;current.type==="extension";depth+=1){if(depth>=MAX_NESTING_DEPTH)throw invalidArgument("Extension nesting is too deep");current=current.storageType}return current}function freezeWireColumn(column){return Object.freeze({columnId:column.columnId,native:freezeNative(column.native),display:Object.freeze({...column.display,data:freezeRegion(column.display.data),offsets:freezeRegion(column.display.offsets),...column.display.validity?{validity:freezeRegion(column.display.validity)}:{}})})}function freezeNative(descriptor){const freezeOptionalRegion=region=>region?freezeRegion(region):void 0;return Object.freeze({...descriptor,dataType:freezeDataType(descriptor.dataType),...freezeOptionalRegion(descriptor.validity)?{validity:freezeOptionalRegion(descriptor.validity)}:{},...freezeOptionalRegion(descriptor.values)?{values:freezeOptionalRegion(descriptor.values)}:{},...freezeOptionalRegion(descriptor.offsets)?{offsets:freezeOptionalRegion(descriptor.offsets)}:{},...freezeOptionalRegion(descriptor.sizes)?{sizes:freezeOptionalRegion(descriptor.sizes)}:{},...freezeOptionalRegion(descriptor.data)?{data:freezeOptionalRegion(descriptor.data)}:{},...freezeOptionalRegion(descriptor.typeIds)?{typeIds:freezeOptionalRegion(descriptor.typeIds)}:{},...freezeOptionalRegion(descriptor.unionOffsets)?{unionOffsets:freezeOptionalRegion(descriptor.unionOffsets)}:{},...descriptor.variadicBuffers?{variadicBuffers:Object.freeze(descriptor.variadicBuffers.map(freezeRegion))}:{},...descriptor.children?{children:Object.freeze(descriptor.children.map(freezeNative))}:{},...descriptor.dictionary?{dictionary:freezeNative(descriptor.dictionary)}:{},...descriptor.runEnds?{runEnds:freezeNative(descriptor.runEnds)}:{}})}function freezeRegion(region){return Object.freeze({...region})}function freezeDataType(dataType){return normalizeDataTypeUnchecked(dataType,0)}function normalizeDataTypeUnchecked(value,depth){return normalizeDataType(value,depth)}function timeUnit(value){if(value==="second"||value==="millisecond"||value==="microsecond"||value==="nanosecond"){return value}throw invalidArgument("Arrow time unit is invalid")}function intervalUnit(value){if(value==="year-month"||value==="day-time"||value==="month-day-nano")return value;throw invalidArgument("Arrow interval unit is invalid")}function decodeFloat16(bits){const sign=(bits&32768)===0?1:-1;const exponent=bits>>>10&31;const fraction=bits&1023;if(exponent===0)return sign*2**-14*(fraction/1024);if(exponent===31)return fraction===0?sign*Infinity:Number.NaN;return sign*2**(exponent-15)*(1+fraction/1024)}function normalizeCellLimit(value){const maxCells=value??DEFAULT_TO_ROWS_CELL_LIMIT;assertPositiveSafeInteger(maxCells,"maxCells");return maxCells}function assertCellLimit(rows,columns,maxCells){const cellCount=rows*columns;if(!Number.isSafeInteger(cellCount)||cellCount>maxCells){throw new TabularkError("RESOURCE_LIMIT",`Decoding ${cellCount} cells exceeds the toRows limit of ${maxCells}`,{details:{resource:"row-materialization-cells",required:cellCount,available:maxCells,cellCount,maxCells}})}}function integer(value,name){if(!Number.isSafeInteger(value))throw invalidArgument(`${name} must be a safe integer`);return value}function positiveInteger(value,name){const result=integer(value,name);if(result<=0)throw invalidArgument(`${name} must be positive`);return result}function asUint8Array(value){if(value instanceof ArrayBuffer)return new Uint8Array(value);return new Uint8Array(value.buffer,value.byteOffset,value.byteLength)}function isRecord3(value){return typeof value==="object"&&value!==null}function assertNonNegativeSafeInteger(value,name){if(!Number.isSafeInteger(value)||value<0){throw invalidArgument(`${name} must be a non-negative safe integer`,{name,value})}}function assertPositiveSafeInteger(value,name){if(!Number.isSafeInteger(value)||value<=0){throw invalidArgument(`${name} must be a positive safe integer`,{name,value})}}var PermitQueueFullError=class extends Error{constructor(maxWaiters){super(`The permit queue already has ${maxWaiters} waiters`);this.maxWaiters=maxWaiters;this.name="PermitQueueFullError"}maxWaiters};var AsyncPermitQueue=class{#maxActive;#maxWaiters;#waiters=[];#active=0;constructor(maxActive,maxWaiters){if(!Number.isSafeInteger(maxActive)||maxActive<=0){throw new RangeError("maxActive must be a positive safe integer")}if(!Number.isSafeInteger(maxWaiters)||maxWaiters<0){throw new RangeError("maxWaiters must be a non-negative safe integer")}this.#maxActive=maxActive;this.#maxWaiters=maxWaiters}acquire(key){if(this.#active<this.#maxActive){this.#active+=1;return Promise.resolve(this.#releaseOnce())}if(this.#waiters.length>=this.#maxWaiters){return Promise.reject(new PermitQueueFullError(this.#maxWaiters))}return new Promise((resolve,reject)=>{this.#waiters.push({key,resolve,reject})})}cancel(key,reason){const index=this.#waiters.findIndex(waiter2=>waiter2.key===key);if(index<0){return false}const[waiter]=this.#waiters.splice(index,1);waiter.reject(reason);this.#wakeWaiters();return true}#releaseOnce(){let released=false;return()=>{if(released){return}released=true;this.#active-=1;this.#wakeWaiters()}}#wakeWaiters(){while(this.#active<this.#maxActive&&this.#waiters.length>0){const waiter=this.#waiters.shift();this.#active+=1;waiter.resolve(this.#releaseOnce())}}};var ByteLruCache=class{#maxBytes;#entries=new Map;#onRemove;#byteLength=0;constructor(maxBytes,options={}){if(!Number.isSafeInteger(maxBytes)||maxBytes<0){throw new RangeError("maxBytes must be a non-negative safe integer")}this.#maxBytes=maxBytes;this.#onRemove=options.onRemove}get maxBytes(){return this.#maxBytes}get(key){const entry=this.#entries.get(key);if(!entry){return void 0}this.#entries.delete(key);this.#entries.set(key,entry);return entry.value}set(key,value,byteLength){if(!Number.isSafeInteger(byteLength)||byteLength<0){throw new RangeError("byteLength must be a non-negative safe integer")}if(byteLength>this.#maxBytes){return}const existing=this.#entries.get(key);if(existing){this.#remove(key,existing)}while(this.#byteLength+byteLength>this.#maxBytes){const oldestKey=this.#entries.keys().next().value;if(oldestKey===void 0){break}const oldest=this.#entries.get(oldestKey);this.#remove(oldestKey,oldest)}this.#entries.set(key,{value,byteLength});this.#byteLength+=byteLength}deleteWhere(predicate){for(const[key,entry]of this.#entries){if(!predicate(key,entry.value)){continue}this.#remove(key,entry)}}clear(){for(const[key,entry]of this.#entries){this.#onRemove?.(key,entry.value,entry.byteLength)}this.#entries.clear();this.#byteLength=0}#remove(key,entry){this.#entries.delete(key);this.#byteLength-=entry.byteLength;this.#onRemove?.(key,entry.value,entry.byteLength)}};function rangeCacheKey(owner,revision,schemaVersion,range){return JSON.stringify([owner,revision,schemaVersion,range.rowStart,range.rowCount,range.columnStart,range.columnCount])}function cloneWireTableBatch(batch){return{layoutVersion:batch.layoutVersion,tableId:batch.tableId,revision:batch.revision,schemaVersion:batch.schemaVersion,range:{...batch.range},buffers:batch.buffers.map(buffer=>Uint8Array.from(asUint8Array2(buffer)).buffer),columns:batch.columns,complete:batch.complete}}function wireBatchByteLength(batch){return batch.buffers.reduce((total,buffer)=>total+buffer.byteLength,0)}function asUint8Array2(value){return value instanceof ArrayBuffer?new Uint8Array(value):new Uint8Array(value.buffer,value.byteOffset,value.byteLength)}var ProtocolFault=class extends Error{code;retryable;details;constructor(code,message,retryable=false,details,cause){super(message,{cause});this.name="ProtocolFault";this.code=code;this.retryable=retryable;this.details=code==="RESOURCE_LIMIT"?normalizeResourceLimitDetails(details):details}};function faultFromUnknown(error,fallback){if(error instanceof ProtocolFault){return error}if(isRecord(error)){return new ProtocolFault(typeof error.code==="string"?error.code:"RUNTIME_FAILURE",typeof error.message==="string"?error.message:fallback,error.retryable===true,error.details,error)}if(error instanceof Error){return new ProtocolFault("RUNTIME_FAILURE",error.message||fallback,false,void 0,error)}return new ProtocolFault("RUNTIME_FAILURE",fallback,false,{value:String(error)})}function serializeFault(error,fallback){const fault=faultFromUnknown(error,fallback);const details=fault.code==="RESOURCE_LIMIT"?normalizeResourceLimitDetails(fault.details):fault.details;return{code:fault.code,message:fault.message,retryable:fault.retryable,...details===void 0?{}:{details:normalizeFaultDetails(fault.code,details)}}}function normalizeFaultDetails(code,details){if(code!=="RESOURCE_LIMIT"||!isRecord(details)){return details}const resource=typeof details.resource==="string"?details.resource:typeof details.resourceCategory==="string"?details.resourceCategory:void 0;if(resource===void 0||details.resource===resource){return details}const{resourceCategory:_legacyResourceCategory,...rest}=details;return{...rest,resource}}var WasmAdapter=class _WasmAdapter{#runtime;constructor(runtime){this.#runtime=runtime}static async load(moduleUrl,expectedAdapterId,config){let bindings;try{bindings=await import(moduleUrl);if(typeof bindings.default!=="function"){throw new TypeError("The WebAssembly module does not export a default initializer")}await bindings.default();const Runtime=bindings.WasmRuntime;if(typeof Runtime!=="function"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`The ${expectedAdapterId} artifact does not export its official runtime class`)}const adapter=new _WasmAdapter(new Runtime(config));try{adapter.#validateContract(expectedAdapterId)}catch(error){try{adapter.dispose()}catch{}throw error}return adapter}catch(error){if(error instanceof ProtocolFault){throw error}throw new ProtocolFault("RUNTIME_FAILURE","Failed to initialize the Tabulark WebAssembly runtime",false,{moduleUrl},error)}}metadata(sourceHandle){return this.#call("metadata",()=>this.#runtime.metadata(sourceHandle))}presentation(tableHandle){return this.#call("presentation",()=>this.#runtime.presentation(tableHandle))}readPresentationRange(tableHandle,request){return this.#call("readPresentationRange",()=>this.#runtime.readPresentationRange(tableHandle,request))}beginOpen(options,sourceLength){return this.#call("beginOpen",()=>this.#runtime.beginOpen(options,sourceLength))}continueOperation(operationHandle2,absoluteOffset,bytes,eof){return this.#call("continueOperation",()=>this.#runtime.continueOperation(operationHandle2,absoluteOffset,bytes,eof))}openTable(sourceHandle,tableId){return this.#call("openTable",()=>this.#runtime.openTable(sourceHandle,tableId))}beginRead(tableHandle,request){return this.#call("beginRead",()=>this.#runtime.beginRead(tableHandle,request))}cancelOperation(operationHandle2){this.#call("cancelOperation",()=>this.#runtime.cancelOperation(operationHandle2))}closeTable(tableHandle){this.#call("closeTable",()=>this.#runtime.closeTable(tableHandle))}closeSource(sourceHandle){this.#call("closeSource",()=>this.#runtime.closeSource(sourceHandle))}dispose(){try{this.#runtime.shutdown()}catch{}this.#runtime.free?.()}#validateContract(expectedAdapterId){const runtime=this.#runtime;const required=["protocolVersion","adapterApiVersion","batchLayoutVersion","adapterId","beginOpen","continueOperation","openTable","metadata","presentation","readPresentationRange","beginRead","cancelOperation","closeTable","closeSource","shutdown"];for(const name of required){if(typeof runtime[name]!=="function"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`WebAssembly adapter does not export ${name}`)}}const protocolVersion=this.#call("protocolVersion",()=>this.#runtime.protocolVersion());const adapterVersion=this.#call("adapterApiVersion",()=>this.#runtime.adapterApiVersion());const layoutVersion=this.#call("batchLayoutVersion",()=>this.#runtime.batchLayoutVersion());const adapterId=this.#call("adapterId",()=>this.#runtime.adapterId());if(protocolVersion!==PROTOCOL_VERSION||adapterVersion!==ADAPTER_API_VERSION||layoutVersion!==BATCH_LAYOUT_VERSION||adapterId!==expectedAdapterId){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`Adapter ${adapterId} protocol/ABI/layout ${protocolVersion}/${adapterVersion}/${layoutVersion} is incompatible with ${expectedAdapterId} ${PROTOCOL_VERSION}/${ADAPTER_API_VERSION}/${BATCH_LAYOUT_VERSION}`)}}#call(operation,call){try{return call()}catch(error){throw faultFromUnknown(error,`WebAssembly ${operation} failed`)}}};var official_adapters_default={manifestVersion:1,adapters:[{id:"tabulark:delimited",entrypoint:".",exportName:"delimitedAdapter",wasm:{packageName:"tabulark-delimited-wasm",crateArtifact:"tabulark_delimited",outputName:"tabulark_delimited",outputDirectory:"dist/wasm/delimited",modulePath:"./wasm/delimited/tabulark_delimited.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["dialect","header","mode","delimiter","sourceName"]},resources:{sourceAccess:"streaming",supportsPresentation:false,runtimeWeight:1}},{id:"tabulark:arrow-ipc",entrypoint:"./arrow",exportName:"arrowIpcAdapter",wasm:{packageName:"tabulark-arrow-wasm",crateArtifact:"tabulark_arrow",outputName:"tabulark_arrow",outputDirectory:"dist/wasm/arrow",modulePath:"./wasm/arrow/tabulark_arrow.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["container","sourceName"]},resources:{sourceAccess:"range",supportsPresentation:false,runtimeWeight:1}},{id:"tabulark:parquet",entrypoint:"./parquet",exportName:"parquetAdapter",wasm:{packageName:"tabulark-parquet-wasm",crateArtifact:"tabulark_parquet",outputName:"tabulark_parquet",outputDirectory:"dist/wasm/parquet",modulePath:"./wasm/parquet/tabulark_parquet.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["sourceName"]},resources:{sourceAccess:"range",supportsPresentation:false,runtimeWeight:2}},{id:"tabulark:excel",entrypoint:"./excel",exportName:"excelAdapter",wasm:{packageName:"tabulark-excel-wasm",crateArtifact:"tabulark_excel",outputName:"tabulark_excel",outputDirectory:"dist/wasm/excel",modulePath:"./wasm/excel/tabulark_excel.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["format","sourceName"]},resources:{sourceAccess:"staged",supportsPresentation:true,runtimeWeight:2}}]};var manifestEntries=validateManifest(official_adapters_default);var OFFICIAL_ADAPTER_IDS=Object.freeze(manifestEntries.map(entry=>entry.id));var OFFICIAL_ADAPTER_MANIFEST=Object.freeze(manifestEntries.map(entry=>Object.freeze({...entry,wasm:Object.freeze({...entry.wasm}),options:Object.freeze({allowedKeys:Object.freeze([...entry.options.allowedKeys])}),resources:Object.freeze({...entry.resources})})));var byId=new Map(OFFICIAL_ADAPTER_MANIFEST.map(entry=>[entry.id,entry]));function isOfficialAdapterId(value){return typeof value==="string"&&byId.has(value)}function officialAdapterManifestEntry(id){const entry=byId.get(id);if(!entry){throw new TypeError(`Unknown official adapter: ${id}`)}return entry}function officialAdapterModuleUrl(id){return new URL(officialAdapterManifestEntry(id).wasm.modulePath,import.meta.url).href}function validateManifest(value){if(!isRecord4(value)||value.manifestVersion!==1||!Array.isArray(value.adapters)){throw new TypeError("The official adapter manifest has an unsupported shape or version")}if(value.adapters.length===0){throw new TypeError("The official adapter manifest must contain at least one adapter")}const ids=new Set;const entrypoints=new Set;const outputDirectories=new Set;return value.adapters.map((candidate,index)=>{if(!isRecord4(candidate)){throw new TypeError(`Official adapter manifest entry ${index} must be an object`)}const{id,entrypoint,exportName,wasm,options,resources}=candidate;if(!isKnownOfficialAdapterId(id)||ids.has(id)){throw new TypeError(`Official adapter manifest entry ${index} has an invalid or duplicate id`)}if(entrypoint!=="."&&entrypoint!=="./arrow"&&entrypoint!=="./parquet"&&entrypoint!=="./excel"||entrypoints.has(entrypoint)||typeof exportName!=="string"||exportName.length===0){throw new TypeError(`Official adapter manifest entry ${index} has an invalid entrypoint or export`)}if(!isRecord4(wasm)||typeof wasm.packageName!=="string"||typeof wasm.crateArtifact!=="string"||typeof wasm.outputName!=="string"||typeof wasm.outputDirectory!=="string"||!wasm.outputDirectory.startsWith("dist/wasm/")||wasm.outputDirectory.includes("..")||outputDirectories.has(wasm.outputDirectory)||typeof wasm.modulePath!=="string"||!wasm.modulePath.startsWith("./wasm/")||wasm.modulePath.includes("..")||wasm.modulePath.includes("?")||wasm.modulePath.includes("#")||wasm.runtimeExport!=="WasmRuntime"||wasm.modulePath!==`./${wasm.outputDirectory.replace(/^dist\//u,"")}/${wasm.outputName}.js`){throw new TypeError(`Official adapter manifest entry ${index} has an invalid WASM artifact`)}if(!isRecord4(options)||!Array.isArray(options.allowedKeys)||options.allowedKeys.some(key=>typeof key!=="string")||new Set(options.allowedKeys).size!==options.allowedKeys.length){throw new TypeError(`Official adapter manifest entry ${index} has invalid option keys`)}if(!isRecord4(resources)||resources.sourceAccess!=="streaming"&&resources.sourceAccess!=="range"&&resources.sourceAccess!=="staged"||typeof resources.supportsPresentation!=="boolean"||!Number.isSafeInteger(resources.runtimeWeight)||resources.runtimeWeight<=0){throw new TypeError(`Official adapter manifest entry ${index} has an invalid resource policy`)}ids.add(id);entrypoints.add(entrypoint);outputDirectories.add(wasm.outputDirectory);return candidate})}function isKnownOfficialAdapterId(value){return value==="tabulark:delimited"||value==="tabulark:arrow-ipc"||value==="tabulark:parquet"||value==="tabulark:excel"}function isRecord4(value){return typeof value==="object"&&value!==null}var CHUNK_BYTES=1024*1024;var MAX_ARROW_SOURCE_BYTES=4294967295;var INITIAL_READ_LIMIT_BYTES=8*CHUNK_BYTES;var INITIAL_ROW_TARGET=256;var MAX_IN_FLIGHT_RANGES=MAX_ACTIVE_RANGES+MAX_RANGE_WAITERS;var scope=globalThis;var shuttingDown=false;var nextDatasetHandle=1;var nextTableHandle=1;var rangeCacheBudgetBytes=0;var memoryLimits;var memoryLedger;var sourceSlotsInUse=0;var rangeRequestsInFlight=0;var adapterRegistrations=new Map;var adapterLoads=new Map;var loadedAdapters=new Map;var adapterRuntimeReservations=new Map;var datasets=new Map;var tables=new Map;var activeRequests=new Map;var openedDatasetsByRequest=new Map;var rangePermits=new AsyncPermitQueue(MAX_ACTIVE_RANGES,MAX_RANGE_WAITERS);scope.addEventListener("message",event=>{void dispatch(event.data)});async function dispatch(value){if(!isRequest(value)){return}const request=value;if(request.protocolVersion!==PROTOCOL_VERSION){postFailure(request.requestId,new ProtocolFault("PROTOCOL_INCOMPATIBLE",`Worker protocol ${PROTOCOL_VERSION} cannot serve protocol ${String(request.protocolVersion)}`));return}try{const result=await runOperation(request);try{postSuccess(request.requestId,result.kind,result.data,result.transfer)}finally{result.release?.()}if(request.op==="listTables"){flushPendingDatasetEvents(request.payload)}if(request.op==="shutdown"){setTimeout(()=>scope.close(),0)}}catch(error){postFailure(request.requestId,error)}}async function runOperation(request){switch(request.op){case"hello":return{kind:"hello",data:await hello(request.payload)};case"openSource":return{kind:"dataset",data:await openSource(request.requestId,request.payload)};case"listTables":return{kind:"tables",data:listTables(request.payload)};case"openTable":return{kind:"table",data:openTable(request.payload)};case"getMetadata":return{kind:"metadata",data:getMetadata(request.payload)};case"getPresentation":return{kind:"presentation",data:getPresentation(request.payload)};case"readPresentationRange":return{kind:"presentationRange",data:readPresentationRange(request.payload)};case"readRange":return readRange(request.requestId,request.payload);case"cancel":cancel(request.payload);return{kind:"acknowledged"};case"closeTable":closeTable(request.payload);return{kind:"acknowledged"};case"closeSource":closeSource(request.payload);return{kind:"acknowledged"};case"shutdown":shutdown();return{kind:"acknowledged"};default:throw new ProtocolFault("INVALID_ARGUMENT",`Unknown operation: ${String(request.op)}`)}}async function hello(value){const payload=expectRecord(value,"hello payload");if(!Number.isSafeInteger(payload.memoryBudgetBytes)||payload.memoryBudgetBytes<=0){throw new ProtocolFault("INVALID_ARGUMENT","memoryBudgetBytes must be a positive safe integer")}if(!Array.isArray(payload.adapters)||payload.adapters.length===0){throw new ProtocolFault("INVALID_ARGUMENT","hello adapters must be a non-empty array")}const registrations=new Map;for(const entry of payload.adapters){if(!isRecord(entry)||!isOfficialAdapterId(entry.id)||Object.keys(entry).some(key=>key!=="id")){throw new ProtocolFault("INVALID_ARGUMENT","hello contains an invalid official adapter")}if(registrations.has(entry.id)){throw new ProtocolFault("INVALID_ARGUMENT",`Adapter ${entry.id} is registered more than once`)}registrations.set(entry.id,Object.freeze({id:entry.id,moduleUrl:adapterModuleUrl(entry.id)}))}if(memoryLimits){const sameIds=registrations.size===adapterRegistrations.size&&[...registrations.keys()].every(id=>adapterRegistrations.has(id));if(payload.memoryBudgetBytes!==memoryLimits.memoryBudgetBytes||!sameIds){throw new ProtocolFault("INVALID_ARGUMENT","The Worker hello handshake cannot be reconfigured after initialization")}return helloResult()}const limits=deriveMemoryBudgetLimits(payload.memoryBudgetBytes);adapterRegistrations=registrations;memoryLimits=limits;memoryLedger=new MemoryReservationLedger(payload.memoryBudgetBytes);rangeCacheBudgetBytes=limits.workerDatasetRangeCacheBytes;return helloResult()}function helloResult(){return{protocolVersion:PROTOCOL_VERSION,adapterApiVersion:ADAPTER_API_VERSION,batchLayoutVersion:BATCH_LAYOUT_VERSION,adapters:Object.freeze([...adapterRegistrations.keys()]),transferableBatches:true}}function createActiveOpenRequest(requestId){return{requestId,kind:"open",cancelled:false,cancellation:createRequestCancellation()}}function createRequestCancellation(){let resolveCancellation;const promise=new Promise(resolve=>{resolveCancellation=resolve});return{promise,resolve:resolveCancellation}}async function openSource(requestId,value){const active=createActiveOpenRequest(requestId);activeRequests.set(requestId,active);let dataset;let sourceHandle;let releaseSourceSlot;let opened=false;try{const limits=requireMemoryLimits();const payload=expectRecord(value,"openSource payload");if(!isOfficialAdapterId(payload.adapterId)){throw new ProtocolFault("INVALID_ARGUMENT","openSource adapterId is not registered")}if(!isRecord(payload.options)||Array.isArray(payload.options)){throw new ProtocolFault("INVALID_ARGUMENT","openSource options must be an object")}let source;if(payload.source instanceof Blob){source=payload.source}else if(payload.source instanceof ArrayBuffer){if(payload.source.byteLength>limits.maxArrayBufferBytes){throw new ProtocolFault("RESOURCE_LIMIT",`ArrayBuffer sources larger than ${limits.maxArrayBufferBytes} bytes must be supplied as a Blob`,false,{resource:"source-staging",requiredBytes:payload.source.byteLength,availableBytes:limits.maxArrayBufferBytes})}source=new Blob([payload.source])}else{throw new ProtocolFault("INVALID_ARGUMENT","source must be a Blob or ArrayBuffer")}releaseSourceSlot=reserveSourceSlot();const runtime=await awaitOperationStep(loadAdapter(payload.adapterId),active);active.adapter=runtime;const initialStep=runtime.beginOpen(adapterOpenOptions(payload,limits),source.size);const openRaw=await runOpenUntilPublished(runtime,source,initialStep,active,payload.adapterId);const progressiveOpen=isProgressiveOpenStep(openRaw);if(openRaw.sourceHandle===void 0||openRaw.sourceHandle===null){throw new ProtocolFault("RUNTIME_FAILURE","Adapter open did not return a sourceHandle")}sourceHandle=operationHandle(openRaw.sourceHandle,"sourceHandle");throwIfCancelled(active);const datasetHandle=`d${nextDatasetHandle++}`;const initialMetadata=normalizeMetadata(openRaw.metadata,normalizeDescriptor(openRaw.table,0));const initialTables=normalizeDescriptors(Array.isArray(openRaw.tables)?openRaw.tables:void 0,openRaw.table,initialMetadata);const openedDataset={handle:datasetHandle,openRequestId:requestId,source,adapterId:payload.adapterId,adapter:runtime,sourceHandle,tables:initialTables,metadata:initialMetadata,scanOffset:progressiveOpen?0:source.size,scanDone:!progressiveOpen,closed:false,eventsReady:false,pendingWarnings:progressiveOpen?[]:Array.isArray(openRaw.warnings)?[...openRaw.warnings]:[],waiters:new Set,rangeCache:createRangeCache(),...active.openedWorksheetReservation===void 0?{}:{openedWorksheetReservation:active.openedWorksheetReservation},releaseSourceSlot};dataset=openedDataset;delete active.openedWorksheetReservation;datasets.set(datasetHandle,openedDataset);releaseSourceSlot=void 0;active.datasetHandle=datasetHandle;if(progressiveOpen){applyProgressiveOpenStep(openedDataset,openRaw,false);await scanInitialPrefix(openedDataset,active);throwIfCancelled(active);delete active.operationHandle;if(!openedDataset.scanDone){openedDataset.scanPromise=scanOpenToEnd(openedDataset)}else{openedDataset.pendingProgress=scanProgress(openedDataset)}}openedDatasetsByRequest.set(requestId,datasetHandle);opened=true;return{datasetHandle}}finally{activeRequests.delete(requestId);if(!opened){if(dataset&&!dataset.closed){closeDatasetState(dataset,false)}else if(!dataset&&sourceHandle!==void 0){try{active.adapter?.closeSource(sourceHandle)}catch{}}}active.openedWorksheetReservation?.release();releaseSourceSlot?.()}}function adapterOpenOptions(payload,limits){const sourceName=typeof payload.options.sourceName==="string"&&payload.options.sourceName.length>0?payload.options.sourceName:void 0;if(payload.adapterId==="tabulark:delimited"){const delimiter=payload.options.delimiter;const header=payload.options.header;const mode=payload.options.mode;if(!isValidDelimiter(delimiter)){throw new ProtocolFault("INVALID_ARGUMENT","Delimited adapter delimiter must be one non-NUL ASCII byte other than CR, LF, or quote")}if(header!=="first-row"&&header!=="none"){throw new ProtocolFault("INVALID_ARGUMENT","Delimited adapter header must be first-row or none")}if(mode!=="lenient"&&mode!=="strict"){throw new ProtocolFault("INVALID_ARGUMENT","Delimited adapter mode must be lenient or strict")}return Object.freeze({delimiter,header:header==="first-row",mode,checkpointInterval:1024,tableName:sourceName??"Table 1",limits:Object.freeze({maxFieldBytes:limits.maxFieldBytes,maxColumns:16384,maxCellsPerRange:25e4,maxBatchBytes:limits.maxBatchBytes,maxDiagnostics:1e3})})}if(payload.adapterId==="tabulark:arrow-ipc"){const container=payload.options.container;if(container!=="auto"&&container!=="file"&&container!=="stream"){throw new ProtocolFault("INVALID_ARGUMENT","Arrow adapter container must be auto, file, or stream")}return Object.freeze({container,tableName:sourceName??"Arrow IPC",limits:Object.freeze({maxSourceBytes:MAX_ARROW_SOURCE_BYTES,maxDecodedBytes:limits.operationBudgetBytes,maxOutputBytes:limits.maxBatchBytes,maxMetadataBytes:limits.maxFieldBytes,maxBlockBytes:Math.min(64*1024*1024,Math.max(1,Math.floor(limits.operationBudgetBytes/4))),streamChunkBytes:Math.min(32*1024,Math.max(1,Math.floor(limits.operationBudgetBytes/16))),maxFields:16384,maxNestingDepth:64,maxRangeCells:25e4,maxDisplayCellBytes:Math.min(1024*1024,Math.max(1,Math.floor(limits.operationBudgetBytes/16)))})})}if(payload.adapterId==="tabulark:parquet"){return Object.freeze({sourceName:sourceName??"Parquet"})}const format=payload.options.format;if(format!=="auto"&&format!=="xls"&&format!=="xlsx"){throw new ProtocolFault("INVALID_ARGUMENT","Excel adapter format must be auto, xls, or xlsx")}return Object.freeze({format,...sourceName===void 0?{}:{sourceName}})}function listTables(value){const payload=expectRecord(value,"listTables payload");const dataset=requireDataset(payload.datasetHandle);return dataset.tables}function openTable(value){const payload=expectRecord(value,"openTable payload");const dataset=requireDataset(payload.datasetHandle);if(typeof payload.tableId!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","tableId must be a string")}if(!dataset.tables.some(table=>table.id===payload.tableId)){throw new ProtocolFault("INVALID_ARGUMENT",`Unknown table: ${payload.tableId}`)}const tableHandle=`t${nextTableHandle++}`;const result=dataset.adapter.openTable(dataset.sourceHandle,payload.tableId);const raw=isRecord(result)?result:{};const adapterTableHandle=operationHandle(raw.tableHandle??raw.handle??result,"openTable tableHandle");const descriptor=dataset.tables.find(candidate=>candidate.id===payload.tableId)??{id:payload.tableId,name:payload.tableId};const metadata=normalizeMetadata(raw.metadata??dataset.adapter.metadata(adapterTableHandle),descriptor);tables.set(tableHandle,{handle:tableHandle,datasetHandle:dataset.handle,tableId:payload.tableId,adapterTableHandle,metadata,closed:false});return{id:payload.tableId,name:dataset.tables.find(descriptor2=>descriptor2.id===payload.tableId)?.name??payload.tableId,tableHandle}}function getMetadata(value){const payload=expectRecord(value,"getMetadata payload");const table=requireTable(payload.tableHandle);const dataset=requireDataset(table.datasetHandle);const metadata=normalizeMetadata(dataset.adapter.metadata(table.adapterTableHandle),{id:table.tableId,name:table.metadata.name});table.metadata=metadata;return metadata}function getPresentation(value){const payload=expectRecord(value,"getPresentation payload");const table=requireTable(payload.tableHandle);const dataset=requireDataset(table.datasetHandle);return normalizePresentationResult(dataset.adapter.presentation(table.adapterTableHandle),table)}function readPresentationRange(value){const payload=expectRecord(value,"readPresentationRange payload");const table=requireTable(payload.tableHandle);const dataset=requireDataset(table.datasetHandle);const range=normalizeRange(payload.range);const result=dataset.adapter.readPresentationRange(table.adapterTableHandle,range);return normalizePresentationRangeResult(result,table,range)}function normalizePresentationResult(value,table){if(value===null||value===void 0)return null;const raw=expectRecord(value,"table presentation");if(raw.kind!=="spreadsheet-v1"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter returned an unknown presentation kind")}if(raw.tableId!==void 0&&raw.tableId!==table.tableId){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter presentation belongs to another table")}return{...raw,kind:"spreadsheet-v1",tableId:table.tableId,revision:numberOr(raw.revision,table.metadata.revision)}}function normalizePresentationRangeResult(value,table,requested){if(value===null||value===void 0)return null;const raw=expectRecord(value,"presentation range");if(raw.kind!=="spreadsheet-v1"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter returned an unknown presentation range kind")}if(raw.tableId!==void 0&&raw.tableId!==table.tableId){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter presentation range belongs to another table")}const range=isRecord(raw.range)?normalizeRange(raw.range):requested;if(range.rowStart!==requested.rowStart||range.rowCount!==requested.rowCount||range.columnStart!==requested.columnStart||range.columnCount!==requested.columnCount){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter presentation range is not aligned with the requested range")}return{...raw,kind:"spreadsheet-v1",tableId:table.tableId,revision:numberOr(raw.revision,table.metadata.revision),range}}function isProgressiveOpenStep(value){if(!isRecord(value)||value.kind!=="open-progress"||!isRecord(value.action)){return false}return value.action.kind==="read-bytes"&&value.sourceHandle!==void 0&&value.metadata!==void 0&&isRecord(value.progress)}function applyProgressiveOpenStep(dataset,value,emitEvents){const sourceHandle=operationHandle(value.sourceHandle,"sourceHandle");if(sourceHandle!==dataset.sourceHandle){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter open changed its sourceHandle")}const metadata=normalizeMetadata(value.metadata,dataset.tables[0]);const progress=value.progress===void 0&&value.kind==="open-complete"?Object.freeze({bytesScanned:dataset.source.size,rowsDiscovered:discoveredRows(metadata),done:true}):normalizeOpenProgress(value.progress,dataset.source.size);if(progress.bytesScanned<dataset.scanOffset){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter scan bytes regressed")}const previousMetadata=JSON.stringify(dataset.metadata);const tableDescriptors=normalizeDescriptors(Array.isArray(value.tables)?value.tables:void 0,value.table,metadata);const complete=value.kind==="open-complete";if(complete!==progress.done){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter completion and progress disagree")}if(progress.rowsDiscovered!==discoveredRows(metadata)){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter progress and metadata row counts disagree")}const action=isRecord(value.action)?value.action:void 0;if(!progress.done&&!action){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter scan returned neither progress action nor completion")}if(progress.done&&action){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Completed adapter scan returned another read action")}if(action&&nonNegativeSafeInteger(action.offset,"read-bytes offset")!==progress.bytesScanned){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter action does not begin at the scanned prefix")}dataset.metadata=metadata;dataset.tables=tableDescriptors;dataset.scanOffset=progress.bytesScanned;dataset.scanDone=progress.done;if(action){dataset.scanOperationHandle=operationHandle(value.operationHandle,"operationHandle");dataset.scanStep=value}else{delete dataset.scanOperationHandle;delete dataset.scanStep}if(emitEvents&&dataset.eventsReady&&JSON.stringify(metadata)!==previousMetadata){emitMetadataUpdate(dataset)}const warnings=Array.isArray(value.warnings)?value.warnings:value.warning===void 0?[]:[value.warning];if(!emitEvents||!dataset.eventsReady){dataset.pendingWarnings.push(...warnings)}else{emitWarnings(dataset,warnings)}if(emitEvents){publishScanProgress(dataset)}notifyScanWaiters(dataset)}async function scanInitialPrefix(dataset,active){while(!dataset.closed&&!dataset.scanDone&&dataset.scanOffset<Math.min(dataset.source.size,INITIAL_READ_LIMIT_BYTES)&&discoveredRows(dataset.metadata)<INITIAL_ROW_TARGET){await scanOpenNextChunk(dataset,active,false)}if(!dataset.closed&&dataset.source.size===0&&!dataset.scanDone){await scanOpenNextChunk(dataset,active,false)}throwIfCancelled(active);if(dataset.closed){throw new ProtocolFault("HANDLE_CLOSED","The source was closed while opening")}}async function scanOpenToEnd(dataset){try{while(!dataset.closed&&!dataset.scanDone){await scanOpenNextChunk(dataset,void 0,true)}}catch(error){if(dataset.closed){return}const failure=error instanceof ProtocolFault?error:new ProtocolFault("RUNTIME_FAILURE","Background source scanning failed",false,void 0,error);dataset.scanError=failure;dataset.scanDone=true;delete dataset.scanStep;delete dataset.scanOperationHandle;notifyScanWaiters(dataset);try{emit({event:"runtimeError",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,payload:serializeFault(failure,"Background source scanning failed")})}finally{closeDatasetState(dataset,true,failure)}}}async function scanOpenNextChunk(dataset,active,emitEvents){if(dataset.closed||dataset.scanDone){return}const step=dataset.scanStep;if(!step){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter scan has no pending read action")}if(step.kind!=="open-progress"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter scan did not return an open-progress step")}const action=isRecord(step.action)?step.action:void 0;if(!action||action.kind!=="read-bytes"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter scan requested an unsupported action")}const operation=operationHandle(step.operationHandle,"operationHandle");const offset=nonNegativeSafeInteger(action.offset,"read-bytes offset");const length=nonNegativeSafeInteger(action.length,"read-bytes length");const limits=requireMemoryLimits();const readLimit=operationReadLimit(dataset.adapterId,limits);if(length>readLimit||!Number.isSafeInteger(offset+length)||offset+length>dataset.source.size){throw new ProtocolFault("RESOURCE_LIMIT","Adapter scan read-bytes action exceeds the source or engine memory budget",false,{resource:operationResource(dataset.adapterId),requiredBytes:length,availableBytes:readLimit,offset,sourceLength:dataset.source.size})}dataset.scanOperationHandle=operation;if(active){active.operationHandle=operation;throwIfCancelled(active)}const reservation=reserveOperationMemory(dataset.adapterId,length);const read=await acquireReservedBlobRead(dataset.source.slice(offset,offset+length),reservation,active);let next;try{const bytes=new Uint8Array(read.buffer);if(dataset.closed){return}if(active){throwIfCancelled(active)}next=expectRecord(dataset.adapter.continueOperation(operation,offset,bytes,offset+length>=dataset.source.size),"adapter scan result")}finally{read.release()}if(dataset.closed){return}applyProgressiveOpenStep(dataset,next,emitEvents);if(active){active.operationHandle=dataset.scanOperationHandle}}function normalizeOpenProgress(value,sourceSize){const raw=expectRecord(value,"adapter scan progress");const bytesScanned=nonNegativeSafeInteger(raw.bytesScanned,"progress bytesScanned");const rowsDiscovered=nonNegativeSafeInteger(raw.rowsDiscovered,"progress rowsDiscovered");if(bytesScanned>sourceSize||typeof raw.done!=="boolean"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Delimited scan progress is invalid")}return Object.freeze({bytesScanned,rowsDiscovered,done:raw.done})}function discoveredRows(metadata){return metadata.extent.rows.kind==="unknown"?0:metadata.extent.rows.value}function scanProgress(dataset){return Object.freeze({bytesScanned:dataset.scanOffset,rowsDiscovered:discoveredRows(dataset.metadata),done:dataset.scanDone})}function publishScanProgress(dataset){const progress=scanProgress(dataset);if(!dataset.eventsReady){dataset.pendingProgress=progress;return}emit({event:"progress",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,payload:{sourceHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,...progress}})}function emitMetadataUpdate(dataset){emit({event:"metadata",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,payload:dataset.metadata});for(const table of tables.values()){if(table.datasetHandle===dataset.handle&&table.tableId===dataset.metadata.tableId&&!table.closed){table.metadata=dataset.metadata;emit({event:"metadata",datasetHandle:dataset.handle,tableHandle:table.handle,tableId:table.tableId,revision:dataset.metadata.revision,payload:dataset.metadata})}}}async function waitUntilIndexed(dataset,request,active){if(request.rowCount===0){return}while(!dataset.scanDone&&discoveredRows(dataset.metadata)<=request.rowStart){throwIfCancelled(active);await new Promise(resolve=>dataset.waiters.add(resolve))}throwIfCancelled(active);if(dataset.scanError){throw dataset.scanError}}function notifyScanWaiters(dataset){const waiters=[...dataset.waiters];dataset.waiters.clear();for(const resolve of waiters){resolve()}}async function readRange(requestId,value){const payload=expectRecord(value,"readRange payload");const table=requireTable(payload.tableHandle);const dataset=requireDataset(table.datasetHandle);const runtime=dataset.adapter;const request=normalizeRange(payload.range);const key=rangeCacheKey(table.tableId,table.metadata.revision,table.metadata.schema.version,request);const cached=dataset.rangeCache.get(key);if(cached){const reservation=requireMemoryLedger().reserve("batch",wireBatchByteLength(cached.batch));try{const batch=cloneWireTableBatch(cached.batch);return{kind:"batch",data:batch,transfer:collectBatchTransfers(batch),release:reservation.release}}catch(error){reservation.release();throw error}}if(rangeRequestsInFlight>=MAX_IN_FLIGHT_RANGES){throw new ProtocolFault("RESOURCE_LIMIT",`The engine may have at most ${MAX_IN_FLIGHT_RANGES} in-flight range requests`,false,{resource:"range-request-slots",required:rangeRequestsInFlight+1,available:MAX_IN_FLIGHT_RANGES,maxActiveRanges:MAX_ACTIVE_RANGES,maxRangeWaiters:MAX_RANGE_WAITERS})}rangeRequestsInFlight+=1;const active={requestId,kind:"range",datasetHandle:dataset.handle,tableHandle:table.handle,adapter:runtime,cancelled:false,cancellation:createRequestCancellation()};activeRequests.set(requestId,active);let releasePermit;try{await waitUntilIndexed(dataset,request,active);throwIfCancelled(active);try{releasePermit=await rangePermits.acquire(requestId)}catch(error){if(error instanceof PermitQueueFullError){throw new ProtocolFault("RESOURCE_LIMIT",`The range queue may contain at most ${error.maxWaiters} waiters`,false,{resource:"range-waiter-slots",required:error.maxWaiters+1,available:error.maxWaiters,maxActiveRanges:MAX_ACTIVE_RANGES,maxRangeWaiters:error.maxWaiters})}throw error}throwIfCancelled(active);const rawBatch=await runAdapterOperation(runtime,dataset.source,runtime.beginRead(table.adapterTableHandle,request),active,dataset.adapterId);throwIfCancelled(active);const rawBatchBytes=rawBatchByteLength(rawBatch);const batchReservation=requireMemoryLedger().reserve("batch",rawBatchBytes);let batch;try{batch=copyBatch(rawBatch,table,dataset,request)}catch(error){batchReservation.release();throw error}if(batch.complete){cacheBatch(dataset,table,request,batch)}const transfer=collectBatchTransfers(batch);return{kind:"batch",data:batch,transfer,release:batchReservation.release}}finally{activeRequests.delete(requestId);releasePermit?.();rangeRequestsInFlight-=1}}function cancel(value){const payload=expectRecord(value,"cancel payload");if(typeof payload.targetRequestId!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","cancel targetRequestId must be a string")}const active=activeRequests.get(payload.targetRequestId);if(active){cancelActive(active);return{cancelled:true}}const datasetHandle=openedDatasetsByRequest.get(payload.targetRequestId);if(!datasetHandle){return{cancelled:false}}const dataset=datasets.get(datasetHandle);if(!dataset||dataset.closed){openedDatasetsByRequest.delete(payload.targetRequestId);return{cancelled:false}}closeDatasetState(dataset,false);return{cancelled:true}}function closeTable(value){const payload=expectRecord(value,"closeTable payload");if(typeof payload.tableHandle!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","tableHandle must be a string")}const table=tables.get(payload.tableHandle);if(!table||table.closed){return{closed:true}}closeTableState(table,true);return{closed:true}}function closeSource(value){const payload=expectRecord(value,"closeSource payload");if(typeof payload.datasetHandle!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","datasetHandle must be a string")}const dataset=datasets.get(payload.datasetHandle);if(!dataset||dataset.closed){return{closed:true}}closeDatasetState(dataset,true);return{closed:true}}function shutdown(){if(shuttingDown){return{closed:true}}shuttingDown=true;for(const dataset of[...datasets.values()]){closeDatasetState(dataset,false)}for(const adapter of loadedAdapters.values()){adapter.dispose()}for(const reservation of adapterRuntimeReservations.values()){reservation.release()}adapterRuntimeReservations.clear();loadedAdapters.clear();adapterLoads.clear();adapterRegistrations.clear();return{closed:true}}function reserveSourceSlot(){const limits=requireMemoryLimits();if(sourceSlotsInUse>=limits.maxSources){throw new ProtocolFault("RESOURCE_LIMIT",`The engine may retain at most ${limits.maxSources} sources or in-flight opens`,false,{resource:"source-slots",required:sourceSlotsInUse+1,available:limits.maxSources,maxSources:limits.maxSources})}sourceSlotsInUse+=1;let released=false;return()=>{if(released){return}released=true;sourceSlotsInUse-=1}}function awaitOperationStep(operation,active){return Promise.race([operation,active.cancellation.promise.then(()=>{throw new ProtocolFault("CANCELLED",active.kind==="open"?"The open request was cancelled":"The range request was cancelled")})])}async function acquireReservedBlobRead(blob,reservation,active){let operation;try{operation=blob.arrayBuffer()}catch(error){reservation.release();throw error}try{const buffer=active===void 0?await operation:await awaitOperationStep(operation,active);return Object.freeze({buffer,release:reservation.release})}catch(error){if(active?.cancelled){void operation.then(()=>reservation.release(),()=>reservation.release())}else{reservation.release()}throw error}}function flushPendingDatasetEvents(value){const payload=isRecord(value)?value:{};if(typeof payload.datasetHandle!=="string"){return}const dataset=datasets.get(payload.datasetHandle);if(!dataset||dataset.closed||dataset.eventsReady){return}dataset.eventsReady=true;emitWarnings(dataset,dataset.pendingWarnings.splice(0));if(dataset.pendingProgress){const progress=dataset.pendingProgress;delete dataset.pendingProgress;emit({event:"progress",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,payload:{sourceHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,...progress}})}}function emitWarnings(dataset,warnings){for(const warning of warnings){emit({event:"warning",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,payload:{handle:dataset.handle,...isRecord(warning)?warning:{kind:"warning",message:String(warning)}}})}}function cancelActive(active,failure){if(active.cancelled){if(active.kind==="range"&&active.failure===void 0&&failure!==void 0){active.failure=failure}return}active.cancelled=true;if(active.operationHandle!==void 0){try{active.adapter?.cancelOperation(active.operationHandle)}catch{}}active.cancellation.resolve();if(active.kind==="open"){if(active.datasetHandle){const dataset2=datasets.get(active.datasetHandle);if(dataset2&&!dataset2.closed){closeDatasetState(dataset2,false)}}return}if(failure!==void 0){active.failure=failure}rangePermits.cancel(active.requestId,failure??new ProtocolFault("CANCELLED","The range request was cancelled"));const dataset=datasets.get(active.datasetHandle);if(dataset){notifyScanWaiters(dataset)}}function throwIfCancelled(active){if(active.cancelled){if(active.kind==="range"&&active.failure!==void 0){throw active.failure}throw new ProtocolFault("CANCELLED",active.kind==="open"?"The open request was cancelled":"The range request was cancelled")}}function closeTableState(table,emitEvent,failure){table.closed=true;for(const active of activeRequests.values()){if(active.kind==="range"&&active.tableHandle===table.handle){cancelActive(active,failure)}}tables.delete(table.handle);const dataset=datasets.get(table.datasetHandle);if(dataset){try{dataset.adapter.closeTable(table.adapterTableHandle)}catch{}}if(emitEvent){emit({event:"closed",datasetHandle:table.datasetHandle,tableHandle:table.handle,tableId:table.tableId,revision:table.metadata.revision,payload:{handle:table.handle,kind:"table"}})}}function closeDatasetState(dataset,emitEvent,failure){dataset.closed=true;dataset.pendingWarnings.length=0;delete dataset.pendingProgress;openedDatasetsByRequest.delete(dataset.openRequestId);dataset.rangeCache.clear();dataset.openedWorksheetReservation?.release();notifyScanWaiters(dataset);if(dataset.scanOperationHandle!==void 0){try{dataset.adapter.cancelOperation(dataset.scanOperationHandle)}catch{}delete dataset.scanOperationHandle;delete dataset.scanStep}for(const table of[...tables.values()]){if(table.datasetHandle===dataset.handle){closeTableState(table,emitEvent,failure)}}for(const active of activeRequests.values()){if(active.datasetHandle===dataset.handle){cancelActive(active,failure)}}datasets.delete(dataset.handle);dataset.releaseSourceSlot();try{dataset.adapter.closeSource(dataset.sourceHandle)}catch{}if(emitEvent){emit({event:"closed",datasetHandle:dataset.handle,tableId:dataset.metadata.tableId,revision:dataset.metadata.revision,payload:{handle:dataset.handle,kind:"source"}})}}function copyBatch(value,table,dataset,request){const raw=expectRecord(value,"range batch");if(!Array.isArray(raw.columns)){throw new ProtocolFault("RUNTIME_FAILURE","Range batch columns must be an array")}const rawRange=isRecord(raw.range)?raw.range:{};const range={rowStart:numberOr(rawRange.rowStart,request.rowStart),rowCount:numberOr(rawRange.rowCount,0),columnStart:numberOr(rawRange.columnStart,request.columnStart),columnCount:numberOr(rawRange.columnCount,raw.columns.length)};if(raw.layoutVersion!==BATCH_LAYOUT_VERSION){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`Adapter returned batch layout ${String(raw.layoutVersion)}; expected ${BATCH_LAYOUT_VERSION}`)}const buffers=copyBufferPool(raw.buffers);const columns=raw.columns.map((column,index)=>copyGenericColumn(column,range.rowCount,index));const batch={layoutVersion:BATCH_LAYOUT_VERSION,tableId:typeof raw.tableId==="string"?raw.tableId:table.tableId,revision:numberOr(raw.revision,table.metadata.revision),schemaVersion:numberOr(raw.schemaVersion,table.metadata.schema.version),range,buffers,columns,complete:raw.complete!==false};new ColumnarTableBatch(batch);return batch}function rawBatchByteLength(value){const raw=expectRecord(value,"range batch");if(!Array.isArray(raw.buffers)){throw new ProtocolFault("RUNTIME_FAILURE","Layout-v1 batch buffers must be an array")}let total=0;for(const[index,buffer]of raw.buffers.entries()){const bytes=buffer instanceof ArrayBuffer?buffer.byteLength:ArrayBuffer.isView(buffer)?buffer.byteLength:void 0;if(bytes===void 0){throw new ProtocolFault("RUNTIME_FAILURE",`batch buffer ${index} must be a Uint8Array`)}total+=bytes;if(!Number.isSafeInteger(total)){throw new ProtocolFault("RESOURCE_LIMIT","Batch buffers exceed the safe integer range",false,{resource:"batch",requiredBytes:total,availableBytes:Number.MAX_SAFE_INTEGER})}}return total}function createRangeCache(){return new ByteLruCache(rangeCacheBudgetBytes,{onRemove:(_key,entry)=>entry.reservation.release()})}function cacheBatch(dataset,table,request,batch){const byteLength=wireBatchByteLength(batch);if(byteLength>dataset.rangeCache.maxBytes){return}let reservation;try{reservation=requireMemoryLedger().reserve("range-cache",byteLength)}catch{return}try{const cachedBatch=cloneWireTableBatch(batch);dataset.rangeCache.set(rangeCacheKey(table.tableId,batch.revision,batch.schemaVersion,request),Object.freeze({batch:cachedBatch,reservation}),byteLength)}catch(error){reservation.release();throw error}}function copyBufferPool(value){if(!Array.isArray(value)){throw new ProtocolFault("RUNTIME_FAILURE","Layout-v1 batch buffers must be an array")}return value.map((entry,index)=>copyBytes(entry,`batch buffer ${index}`).buffer)}function copyGenericColumn(value,rows,index){const raw=expectRecord(value,"batch column");return Object.freeze({columnId:typeof raw.columnId==="string"?raw.columnId:`c${index}`,native:copyNativeDescriptor(raw.native,rows,0),display:copyDisplayDescriptor(raw.display)})}function copyNativeDescriptor(value,fallbackLength,depth){if(depth>=64){throw new ProtocolFault("RESOURCE_LIMIT","Native descriptor nesting may not exceed 64",false,{resource:"descriptor-nesting",required:depth+1,available:64})}const raw=expectRecord(value,"native column descriptor");const encoding=typeof raw.encoding==="string"?raw.encoding:"";const common={...encoding.length===0?{}:{encoding},dataType:raw.dataType,length:numberOr(raw.length,fallbackLength),...raw.validity===void 0?{}:{validity:copyRegion(raw.validity,"validity")}};switch(encoding){case"null":return Object.freeze(common);case"bitmap":return Object.freeze({...common,values:copyRegion(raw.values,"bitmap values")});case"fixed-width":return Object.freeze({...common,values:copyRegion(raw.values,"fixed-width values")});case"variable-width":return Object.freeze({...common,offsets:copyRegion(raw.offsets,"variable-width offsets"),data:copyRegion(raw.values,"variable-width values")});case"view":return Object.freeze({...common,values:copyRegion(raw.views,"view records"),variadicBuffers:Object.freeze((Array.isArray(raw.buffers)?raw.buffers:[]).map(entry=>copyRegion(entry,"view buffer")))});case"list":return Object.freeze({...common,offsets:copyRegion(raw.offsets,"list offsets"),children:Object.freeze([copyNativeDescriptor(raw.values,0,depth+1)])});case"list-view":return Object.freeze({...common,offsets:copyRegion(raw.offsets,"list-view offsets"),sizes:copyRegion(raw.sizes,"list-view sizes"),children:Object.freeze([copyNativeDescriptor(raw.values,0,depth+1)])});case"fixed-size-list":return Object.freeze({...common,children:Object.freeze([copyNativeDescriptor(raw.values,0,depth+1)])});case"struct":return Object.freeze({...common,children:Object.freeze((Array.isArray(raw.fields)?raw.fields:[]).map(field=>copyNativeDescriptor(field,0,depth+1)))});case"union":{const fields=Array.isArray(raw.fields)?raw.fields:[];return Object.freeze({...common,typeIds:copyRegion(raw.typeIds??raw.type_ids,"union type ids"),...raw.offsets===void 0?{}:{unionOffsets:copyRegion(raw.offsets,"union offsets")},children:Object.freeze(fields.map(field=>{const entry=expectRecord(field,"union child");return Object.freeze({...copyNativeDescriptor(entry.values,0,depth+1),typeId:numberOr(entry.typeId,0)})}))})}case"dictionary":return Object.freeze({...common,children:Object.freeze([copyNativeDescriptor(raw.keys,common.length,depth+1),copyNativeDescriptor(raw.values,0,depth+1)]),dictionary:copyNativeDescriptor(raw.values,0,depth+1)});case"run-end-encoded":return Object.freeze({...common,runEnds:copyNativeDescriptor(raw.runEnds??raw.run_ends,0,depth+1),children:Object.freeze([copyNativeDescriptor(raw.values,0,depth+1)])});default:throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`Adapter returned an unknown native array encoding: ${encoding||"<missing>"}`)}}function copyDisplayDescriptor(value){const raw=expectRecord(value,"display column descriptor");if(raw.encoding!=="variable-width"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter display columns must use the UTF-8 variable-width layout")}return Object.freeze({encoding:"utf8",data:copyRegion(raw.values,"display values"),offsets:copyRegion(raw.offsets,"display offsets"),...raw.validity===void 0?{}:{validity:copyRegion(raw.validity,"display validity")}})}function copyRegion(value,name){const wrapper=expectRecord(value,`${name} region`);const raw=isRecord(wrapper.buffer)?wrapper.buffer:wrapper;if(!Number.isSafeInteger(raw.buffer)||raw.buffer<0){throw new ProtocolFault("RUNTIME_FAILURE",`${name} region has an invalid buffer index`)}return Object.freeze({buffer:raw.buffer,...raw.byteOffset===void 0?{}:{byteOffset:numberOr(raw.byteOffset,0)},...raw.byteLength===void 0?{}:{byteLength:numberOr(raw.byteLength,0)},...wrapper.bitOffset===void 0?{}:{bitOffset:numberOr(wrapper.bitOffset,0)}})}function copyBytes(value,name){if(value instanceof ArrayBuffer){return Uint8Array.from(new Uint8Array(value))}if(ArrayBuffer.isView(value)){return Uint8Array.from(new Uint8Array(value.buffer,value.byteOffset,value.byteLength))}throw new ProtocolFault("RUNTIME_FAILURE",`${name} must be a Uint8Array`)}function collectBatchTransfers(batch){const transfers=new Set;for(const buffer of batch.buffers){transfers.add(buffer instanceof ArrayBuffer?buffer:buffer.buffer)}return[...transfers]}function normalizeMetadata(value,fallback){const raw=isRecord(value)?value:{};const rawExtent=isRecord(raw.extent)?raw.extent:{};const rawSchema=isRecord(raw.schema)?raw.schema:{};const columns=Array.isArray(rawSchema.columns)?rawSchema.columns.map((column,index)=>normalizeColumn(column,index)):[];return{tableId:typeof raw.tableId==="string"?raw.tableId:fallback?.id??"table-0",name:typeof raw.name==="string"?raw.name:fallback?.name??"Table 1",revision:numberOr(raw.revision,0),extent:{rows:normalizeAxis(rawExtent.rows,"at-least",0),columns:normalizeAxis(rawExtent.columns,"exact",columns.length)},schema:{version:numberOr(rawSchema.version,0),columns},capabilities:isRecord(raw.capabilities)?{...raw.capabilities,randomAccess:raw.capabilities.randomAccess==="full"?"full":"indexed-prefix",typedValues:raw.capabilities.typedValues===true,search:raw.capabilities.search===true,sort:raw.capabilities.sort===true,filter:raw.capabilities.filter===true,multiTable:raw.capabilities.multiTable===true}:{randomAccess:"indexed-prefix",typedValues:false,search:false,sort:false,filter:false,multiTable:false}}}function normalizeColumn(value,index){const raw=isRecord(value)?value:{};return{id:typeof raw.id==="string"?raw.id:`c${index}`,name:typeof raw.name==="string"?raw.name:`column_${index+1}`,index:numberOr(raw.index,index),dataType:normalizeDataType(raw.dataType??{type:"unknown"}),nullable:raw.nullable!==false,...isRecord(raw.metadata)?{metadata:Object.freeze(Object.fromEntries(Object.entries(raw.metadata).map(([key,entry])=>[key,String(entry)])))}:{}}}function normalizeAxis(value,fallbackKind,fallbackValue){if(isRecord(value)){if(value.kind==="unknown"){return{kind:"unknown"}}if((value.kind==="exact"||value.kind==="at-least")&&Number.isSafeInteger(value.value)&&value.value>=0){return{kind:value.kind,value:value.value}}}return{kind:fallbackKind,value:fallbackValue}}function isValidDelimiter(value){if(typeof value!=="string"||value.length!==1){return false}const byte=value.charCodeAt(0);return byte<=127&&byte!==0&&byte!==13&&byte!==10&&byte!==34}function normalizeDescriptors(value,single,metadata){const candidates=Array.isArray(value)&&value.length>0?value:single===void 0?[]:[single];const descriptors=candidates.map((entry,index)=>normalizeDescriptor(entry,index));return descriptors.length>0?descriptors:[{id:metadata.tableId,name:metadata.name}]}function normalizeDescriptor(value,index){const raw=isRecord(value)?value:{};return{id:typeof raw.id==="string"?raw.id:`table-${index}`,name:typeof raw.name==="string"?raw.name:`Table ${index+1}`}}function normalizeRange(value){const raw=expectRecord(value,"range request");const request={rowStart:raw.rowStart,rowCount:raw.rowCount,columnStart:raw.columnStart,columnCount:raw.columnCount};for(const[name,field]of Object.entries(request)){if(!Number.isSafeInteger(field)||field<0){throw new ProtocolFault("INVALID_RANGE",`${name} must be a non-negative safe integer`)}}return request}function numberOr(value,fallback){return Number.isSafeInteger(value)&&value>=0?value:fallback}function adapterModuleUrl(id){const testUrls=globalThis.__tabularkTestOnlyAdapterModuleUrls;const testUrl=testUrls?.[id];return typeof testUrl==="string"&&testUrl.length>0?testUrl:officialAdapterModuleUrl(id)}async function loadAdapter(id){if(shuttingDown){throw new ProtocolFault("HANDLE_CLOSED","The Worker runtime is not available")}const registration=adapterRegistrations.get(id);if(!registration){throw new ProtocolFault("INVALID_ARGUMENT",`Adapter ${id} is not registered`)}const existing=adapterLoads.get(id);if(existing)return existing;const limits=requireMemoryLimits();if(!isOfficialAdapterId(id)){throw new ProtocolFault("INVALID_ARGUMENT",`Adapter ${id} is not official`)}const runtimeBudgetBytes=adapterRuntimeBudget(id,limits);const reservation=requireMemoryLedger().reserve("adapter-runtime",runtimeBudgetBytes);adapterRuntimeReservations.set(id,reservation);const loading=WasmAdapter.load(registration.moduleUrl,registration.id,{memoryBudgetBytes:runtimeBudgetBytes,indexBudgetBytes:Math.min(limits.indexBudgetBytes,Math.floor(runtimeBudgetBytes/2)),tileCacheBudgetBytes:Math.min(limits.adapterTileCacheBudgetBytes,Math.floor(runtimeBudgetBytes/2)),chunkBytes:Math.min(CHUNK_BYTES,limits.operationBudgetBytes),checkpointRows:1024,maxFieldBytes:limits.maxFieldBytes,maxColumns:16384,maxRangeCells:25e4,maxBatchBytes:limits.maxBatchBytes,maxSources:limits.maxSources,maxActiveRanges:limits.maxActiveRanges}).then(loaded=>{loadedAdapters.set(id,loaded);return loaded}).catch(error=>{adapterLoads.delete(id);loadedAdapters.delete(id);adapterRuntimeReservations.get(id)?.release();adapterRuntimeReservations.delete(id);throw error});adapterLoads.set(id,loading);return loading}function adapterRuntimeBudget(id,limits){const registrations=[...adapterRegistrations.keys()].filter(isOfficialAdapterId);const totalWeight=registrations.reduce((total,adapterId)=>total+officialAdapterManifestEntry(adapterId).resources.runtimeWeight,0);const weight=officialAdapterManifestEntry(id).resources.runtimeWeight;return Math.max(1,Math.floor(limits.adapterRuntimePoolBytes*weight/Math.max(1,totalWeight)))}function operationResource(id){return id==="tabulark:parquet"?"compressed-page":"source-staging"}function operationReadLimit(id,limits){return id==="tabulark:excel"?limits.maxArrayBufferBytes:limits.operationBudgetBytes}function reserveOperationMemory(id,bytes){return requireMemoryLedger().reserve(operationResource(id),bytes)}async function runOpenUntilPublished(adapter,source,initial,active,adapterId){let step=initial;let complete=false;let published=false;try{for(;;){throwIfCancelled(active);const raw=expectRecord(step,"adapter open result");if(isProgressiveOpenStep(raw)){published=true;return raw}if(raw.kind==="open-complete"){complete=true;delete active.operationHandle;return raw}if(raw.kind!=="read-bytes"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter open returned an invalid discriminated step")}const action=isRecord(raw.action)?raw.action:void 0;if(!action){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter read-bytes step has no action")}if(action.kind!=="read-bytes"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter requested an unsupported action")}active.operationHandle=operationHandle(raw.operationHandle,"operationHandle");const offset=nonNegativeSafeInteger(action.offset,"read-bytes offset");const length=nonNegativeSafeInteger(action.length,"read-bytes length");const limits=requireMemoryLimits();const readLimit=operationReadLimit(adapterId,limits);if(length>readLimit||!Number.isSafeInteger(offset+length)||offset+length>source.size){throw new ProtocolFault("RESOURCE_LIMIT","Adapter read-bytes action exceeds the source or engine memory budget",false,{resource:operationResource(adapterId),requiredBytes:length,availableBytes:readLimit,offset,sourceLength:source.size})}const reservation=reserveOperationMemory(adapterId,length);const read=await acquireReservedBlobRead(source.slice(offset,offset+length),reservation,active);try{const bytes=new Uint8Array(read.buffer);throwIfCancelled(active);if(adapterId==="tabulark:excel"&&active.openedWorksheetReservation===void 0){active.openedWorksheetReservation=requireMemoryLedger().reserve("opened-worksheet",source.size)}step=adapter.continueOperation(active.operationHandle,offset,bytes,offset+length>=source.size)}finally{read.release()}}}finally{if(!complete&&!published&&active.operationHandle!==void 0){try{adapter.cancelOperation(active.operationHandle)}catch{}delete active.operationHandle}}}async function runAdapterOperation(adapter,source,initial,active,adapterId){let step=initial;let complete=false;try{for(;;){throwIfCancelled(active);const raw=expectRecord(step,"adapter operation result");if(raw.kind==="read-complete"){complete=true;delete active.operationHandle;return raw.batch}if(raw.kind!=="read-bytes"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter read returned an invalid discriminated step")}const action=isRecord(raw.action)?raw.action:void 0;if(!action){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter read-bytes step has no action")}if(action.kind!=="read-bytes"){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE","Adapter requested an unsupported action")}active.operationHandle=operationHandle(raw.operationHandle,"operationHandle");const offset=nonNegativeSafeInteger(action.offset,"read-bytes offset");const length=nonNegativeSafeInteger(action.length,"read-bytes length");const limits=requireMemoryLimits();const readLimit=operationReadLimit(adapterId,limits);if(length>readLimit||!Number.isSafeInteger(offset+length)||offset+length>source.size){throw new ProtocolFault("RESOURCE_LIMIT","Adapter read-bytes action exceeds the source or engine memory budget",false,{resource:operationResource(adapterId),requiredBytes:length,availableBytes:readLimit,offset,sourceLength:source.size})}const reservation=reserveOperationMemory(adapterId,length);const read=await acquireReservedBlobRead(source.slice(offset,offset+length),reservation,active);try{const bytes=new Uint8Array(read.buffer);throwIfCancelled(active);step=adapter.continueOperation(active.operationHandle,offset,bytes,offset+length>=source.size)}finally{read.release()}}}finally{if(!complete&&active.operationHandle!==void 0){try{adapter.cancelOperation(active.operationHandle)}catch{}delete active.operationHandle}}}function operationHandle(value,name){if(typeof value==="string"&&value.length>0)return value;if(Number.isSafeInteger(value)&&value>=0)return value;throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`${name} must be a handle`)}function nonNegativeSafeInteger(value,name){if(!Number.isSafeInteger(value)||value<0){throw new ProtocolFault("PROTOCOL_INCOMPATIBLE",`${name} must be a non-negative safe integer`)}return value}function requireMemoryLimits(){if(!memoryLimits){throw new ProtocolFault("HANDLE_CLOSED","The Worker runtime is not available")}return memoryLimits}function requireMemoryLedger(){if(!memoryLedger){throw new ProtocolFault("HANDLE_CLOSED","The Worker memory ledger is not available")}return memoryLedger}function requireDataset(value){if(typeof value!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","datasetHandle must be a string")}const dataset=datasets.get(value);if(!dataset||dataset.closed){throw new ProtocolFault("HANDLE_CLOSED","The dataset is closed")}return dataset}function requireTable(value){if(typeof value!=="string"){throw new ProtocolFault("INVALID_ARGUMENT","tableHandle must be a string")}const table=tables.get(value);if(!table||table.closed){throw new ProtocolFault("HANDLE_CLOSED","The table is closed")}return table}function expectRecord(value,name){if(!isRecord(value)){throw new ProtocolFault("INVALID_ARGUMENT",`${name} must be an object`)}return value}function isRequest(value){return isRecord(value)&&typeof value.requestId==="string"&&typeof value.op==="string"&&"payload"in value}function postSuccess(requestId,kind,data,transfer=[]){const response={protocolVersion:PROTOCOL_VERSION,requestId,status:"success",result:data===void 0?{kind}:{kind,data}};scope.postMessage(response,transfer)}function postFailure(requestId,error){const response={protocolVersion:PROTOCOL_VERSION,requestId,status:"failure",error:serializeFault(error,"Worker operation failed")};scope.postMessage(response)}function emit(event){scope.postMessage({protocolVersion:PROTOCOL_VERSION,...event})}
|
|
1
|
+
function m(e){return typeof e=="object"&&e!==null}var j=class e extends Error{code;retryable;details;constructor(n,t,r={}){super(t,{cause:r.cause}),this.name="TabularkError",this.code=n,this.retryable=r.retryable??!1,this.details=n==="RESOURCE_LIMIT"?Se(r.details):r.details}static fromSerialized(n){return new e(n.code,n.message,{retryable:n.retryable,details:n.details})}};function Se(e){let n=ot(e)?e:{},t=typeof n.resource=="string"&&n.resource.length>0?n.resource:typeof n.resourceCategory=="string"&&n.resourceCategory.length>0?n.resourceCategory:at(n);if(de(n.requiredBytes)&&de(n.availableBytes))return Object.freeze({...n,resource:t});if(de(n.required)&&de(n.available))return Object.freeze({...n,resource:t});let r=Ee(n,["maxDecodedBytes","maxOutputBytes","maxMetadataBytes","maxBlockBytes","maxDisplayCellBytes","maxDisplayBytes","maxSourceBytes","maxFieldBytes","maxBatchBytes","maxOperationBytes","maxZipEntryBytes","maxZipUncompressedBytes","maxCfbStreamBytes"]);if(r!==void 0){let i=Ee(n,["decodedBytes","outputBytes","metadataBytes","blockBytes","displayCellBytes","displayBytes","sourceBytes","fieldBytes","batchBytes","operationBytes"])??r+1;return Object.freeze({...n,resource:t,requiredBytes:i,availableBytes:r})}let a=Ee(n,["limit","maxCells","maxRangeCells","maxSources","maxActiveRanges","maxRangeWaiters","maxColumns","maxFields","maxNestingDepth","maxWorksheetRows","maxWorksheetColumns","maxStyles","maxMergedRegions"])??0,o=Ee(n,["cells","cellCount","visibleCellCount","sources","activeRanges","rangeWaiters","columns","fields","nestingDepth","worksheetRows","worksheetColumns","styles","mergedRegions"])??a+1;return Object.freeze({...n,resource:t,required:o,available:a})}function at(e){let n=Object.keys(e).join(" ").toLowerCase();return n.includes("source")?n.includes("byte")?"source-staging":"source-slots":n.includes("metadata")?"metadata":n.includes("decoded")||n.includes("decompress")?"decompression":n.includes("display")?"display-values":n.includes("field")?"field":n.includes("batch")?"batch":n.includes("range")||n.includes("cell")?"range-cells":n.includes("column")?"columns":n.includes("nest")?"descriptor-nesting":n.includes("worksheet")?"worksheet-dimensions":"adapter-resource"}function Ee(e,n){for(let t of n)if(de(e[t]))return e[t]}function de(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function ot(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function f(e,n){return new j("INVALID_ARGUMENT",e,{details:n})}var Zr=256*1024*1024,it=128*1024*1024,P=25e4,st=1e4,K=64,lt=64*1024*1024,dt=96*1024*1024,ut=32*1024*1024,Bn=8*1024*1024,Be=new TextDecoder,kn=new WeakMap,ct=2,ae=2,pe=8;function Ln(e){pn(e,"memoryBudgetBytes");let n=Math.floor(e/8),t=Math.floor(e/32),r=Math.max(1,Math.floor(e/2)),a=Math.max(1,Math.floor(e/8)),o=Math.max(1,Math.floor(e*3/4)),i=Math.max(1,n),l=Math.max(1,e-o-i);return Object.freeze({memoryBudgetBytes:e,workerBudgetBytes:o,mainThreadSourceBytes:i,mainThreadRetainedBytes:l,sourceRangeCacheBytes:Math.max(1,Math.floor(o/8)),adapterRuntimePoolBytes:r,operationBudgetBytes:a,indexBudgetBytes:Math.min(lt,n),adapterTileCacheBudgetBytes:Math.min(dt,a),mainThreadRangeCacheBytes:Math.min(ut,n),maxFieldBytes:Math.min(Bn,t),maxBatchBytes:Math.min(Bn,t),maxArrayBufferBytes:Math.min(it,Math.floor(e/2)),maxSources:ct,maxActiveRanges:ae,maxRangeWaiters:pe})}var Pe=class{#e;#n=0;constructor(n){pn(n,"capacityBytes"),this.#e=n}get capacityBytes(){return this.#e}get usedBytes(){return this.#n}get availableBytes(){return this.#e-this.#n}reserve(n,t){if(!Number.isSafeInteger(t)||t<0)throw f("Reservation bytes must be a non-negative safe integer");let r=this.availableBytes;if(t>r)throw new j("RESOURCE_LIMIT",`Insufficient memory reservation capacity for ${n}`,{details:{resource:n,requiredBytes:t,availableBytes:r}});this.#n+=t;let a=!1;return Object.freeze({resource:n,bytes:t,release:()=>{a||(a=!0,this.#n-=t)}})}},Le=class{tableId;revision;schemaVersion;range;columns;complete;#e;#n;constructor(n){if(n.layoutVersion!==1)throw f(`Batch layout ${String(n.layoutVersion)} is incompatible with layout ${1}`);this.tableId=n.tableId,this.revision=n.revision,this.schemaVersion=n.schemaVersion,this.range=Object.freeze({...n.range}),this.#e=Object.freeze(n.buffers.map(vt)),this.#n=Object.freeze(n.columns.map(t=>Rt(t))),this.complete=n.complete,mt(this.range,this.#e,this.#n),this.columns=Object.freeze(this.#n.map((t,r)=>new un(t,this.#e,this.range.rowCount,this.range.columnStart+r)))}toRows(n={}){let t=Me(n.maxCells);_e(this.range.rowCount,this.columns.length,t);let r=Array.from({length:this.range.rowCount},()=>Array(this.columns.length));for(let a=0;a<this.columns.length;a+=1)for(let o=0;o<this.range.rowCount;o+=1)r[o][a]=this.columns[a].getValue(o);return r}toDisplayRows(n={}){let t=Me(n.maxCells);_e(this.range.rowCount,this.columns.length,t);let r=Array.from({length:this.range.rowCount},()=>Array(this.columns.length));for(let a=0;a<this.columns.length;a+=1)for(let o=0;o<this.range.rowCount;o+=1)r[o][a]=this.columns[a].getDisplayValue(o);return r}},un=class{columnId;columnIndex;rowCount;#e;#n;constructor(n,t,r,a){this.columnId=n.columnId,this.columnIndex=a,this.rowCount=r,this.#e=n,this.#n=t,Object.freeze(this)}getValue(n){return Cn(n,this.rowCount),Y(this.#e.native,n,this.#n,0)}getDisplayValue(n){return Cn(n,this.rowCount),ft(this.#e.display,n,this.#n,this.columnId)}toValues(n={}){let t=Me(n.maxCells);return _e(this.rowCount,1,t),Array.from({length:this.rowCount},(r,a)=>this.getValue(a))}toDisplayValues(n={}){let t=Me(n.maxCells);return _e(this.rowCount,1,t),Array.from({length:this.rowCount},(r,a)=>this.getDisplayValue(a))}};function Cn(e,n){if(!Number.isSafeInteger(e)||e<0||e>=n)throw f(`Batch row offset must be an integer from 0 through ${Math.max(0,n-1)}`)}function ft(e,n,t,r){let a=(e.offset??0)+n;if(!Dn(e.validity,a,t))return null;let o=z(e.offsets,t,"display offsets"),i=z(e.data,t,"display data"),l=ce(o,a,4),d=ce(o,a+1,4);if(d<l||d>i.byteLength)throw f(`Column ${r} has invalid display offsets`);return Be.decode(i.subarray(l,d))}function pt(e){for(let[t,r]of Object.entries(e))De(r,t);if(e.rowCount>Number.MAX_SAFE_INTEGER-e.rowStart||e.columnCount>Number.MAX_SAFE_INTEGER-e.columnStart)throw new j("INVALID_RANGE","Range end must be a safe integer");let n=e.rowCount*e.columnCount;if(e.rowCount>P||e.columnCount>P||!Number.isSafeInteger(n)||n>P){let t=Number.isSafeInteger(n)?Math.max(n,e.rowCount,e.columnCount):Number.MAX_SAFE_INTEGER;throw new j("RESOURCE_LIMIT",`A range may contain at most ${P} cells`,{details:{resource:"range-cells",required:t,available:P,cells:Number.isSafeInteger(n)?n:Number.MAX_SAFE_INTEGER,limit:P}})}return Object.freeze({...e})}function W(e,n=0){if(n>=K)throw f(`Arrow data type nesting may not exceed ${K}`);if(!re(e)||typeof e.type!="string")throw f("Column dataType must be a recursive Arrow data type descriptor");let t={"u-int8":"uint8","u-int16":"uint16","u-int32":"uint32","u-int64":"uint64"}[e.type]??e.type;if(new Set(["unknown","null","boolean","int8","int16","int32","int64","uint8","uint16","uint32","uint64","float16","float32","float64","date32","date64","binary","large-binary","binary-view","utf8","large-utf8","utf8-view"]).has(t))return Object.freeze({type:t});if(t==="timestamp")return Object.freeze({type:t,unit:Pn(e.unit),...typeof e.timezone=="string"?{timezone:e.timezone}:{}});if(t==="time32"||t==="time64"||t==="duration")return Object.freeze({type:t,unit:Pn(e.unit)});if(t==="interval")return Object.freeze({type:t,unit:It(e.unit)});if(t==="fixed-size-binary")return Object.freeze({type:t,byteWidth:dn(e.byteWidth??e.byte_width,"byteWidth")});if(t==="decimal32"||t==="decimal64"||t==="decimal128"||t==="decimal256")return Object.freeze({type:t,precision:dn(e.precision,"precision"),scale:cn(e.scale,"scale")});if(t==="list"||t==="large-list"||t==="list-view"||t==="large-list-view")return Object.freeze({type:t,field:X(e.field,n+1)});if(t==="fixed-size-list")return Object.freeze({type:t,field:X(e.field,n+1),listSize:dn(e.listSize??e.list_size,"listSize")});if(t==="struct"){if(!Array.isArray(e.fields))throw f("Struct fields must be an array");return Object.freeze({type:t,fields:Object.freeze(e.fields.map(a=>X(a,n+1)))})}if(t==="union"){if(!Array.isArray(e.fields)||e.mode!=="sparse"&&e.mode!=="dense")throw f("Union dataType requires a mode and fields");return Object.freeze({type:t,mode:e.mode,fields:Object.freeze(e.fields.map(a=>{if(!re(a))throw f("Union field entries must be objects");return Object.freeze({typeId:cn(a.typeId,"typeId"),field:X(a.field,n+1)})}))})}if(t==="dictionary")return Object.freeze({type:t,indexType:W(e.indexType,n+1),valueType:W(e.valueType,n+1),...e.ordered===!0?{ordered:!0}:{}});if(t==="map")return Object.freeze({type:t,entries:X(e.entries,n+1),keysSorted:e.keysSorted===!0||e.keys_sorted===!0});if(t==="run-end-encoded")return Object.freeze({type:t,runEnds:X(e.runEnds??e.run_ends,n+1),values:X(e.values,n+1)});if(t==="extension"){if(typeof e.name!="string"||e.name.length===0)throw f("Arrow extension name must be a non-empty string");return Object.freeze({type:t,name:e.name,...typeof e.metadata=="string"?{metadata:e.metadata}:{},storageType:W(e.storageType,n+1)})}throw f(`Unknown Arrow data type: ${t}`)}function X(e,n){if(!re(e))throw f("Arrow field must be an object");let t=re(e.metadata)?Object.freeze(Object.fromEntries(Object.entries(e.metadata).map(([r,a])=>[r,String(a)]))):void 0;return Object.freeze({name:typeof e.name=="string"?e.name:"",nullable:e.nullable!==!1,dataType:W(e.dataType,n),...t?{metadata:t}:{}})}function mt(e,n,t){if(pt(e),t.length!==e.columnCount)throw f(`Batch has ${t.length} columns; expected ${e.columnCount}`);for(let[r,a]of t.entries())if(yt(a.display,e.rowCount,n,a.columnId),ke(a.native,n,0,`columns[${r}].native`),a.native.length<e.rowCount)throw f(`Column ${a.columnId} is shorter than the returned range`)}function yt(e,n,t,r){let a=e.offset??0;De(a,"display offset");let o=z(e.offsets,t,"display offsets");if(o.byteLength<(a+n+1)*4)throw f(`Column ${r} has incomplete display offsets`);let i=z(e.data,t,"display data");if(e.validity&&z(e.validity,t,"display validity").byteLength<Math.ceil((a+n)/8))throw f(`Column ${r} has an incomplete display validity bitmap`);let l=0;for(let d=a;d<=a+n;d+=1){let u=ce(o,d,4);if(u<l||u>i.byteLength)throw f(`Column ${r} has invalid display offsets`);l=u}}function ke(e,n,t,r){if(t>=K)throw f(`Native column nesting may not exceed ${K}`);De(e.length,`${r}.length`),De(e.offset??0,`${r}.offset`),W(e.dataType,t);let a=[e.validity,e.values,e.offsets,e.sizes,e.data,e.typeIds,e.unionOffsets,...e.variadicBuffers??[]];for(let o of a)o&&z(o,n,r);for(let[o,i]of(e.children??[]).entries())ke(i,n,t+1,`${r}.children[${o}]`);e.dictionary&&ke(e.dictionary,n,t+1,`${r}.dictionary`),e.runEnds&&ke(e.runEnds,n,t+1,`${r}.runEnds`)}function Y(e,n,t,r){if(r>=K)throw f(`Native value nesting may not exceed ${K}`);if(n<0||n>=e.length)throw f("Native value index is outside its descriptor");let a=(e.offset??0)+n;if(!Dn(e.validity,a,t))return null;let o=fn(e.dataType);switch(o.type){case"null":return null;case"unknown":{let i=ln(e,t,a,4);return Be.decode(i)}case"boolean":{let i=N(e.values,t,"boolean values"),l=(e.values?.bitOffset??0)+a;return(i[l>>>3]&1<<(l&7))!==0}case"int8":return E(e,t,a,1,"signed");case"uint8":return E(e,t,a,1,"unsigned");case"int16":return E(e,t,a,2,"signed");case"uint16":return E(e,t,a,2,"unsigned");case"int32":return E(e,t,a,4,"signed");case"uint32":return E(e,t,a,4,"unsigned");case"int64":return $(e,t,a,!0);case"uint64":return $(e,t,a,!1);case"float16":return Tt(E(e,t,a,2,"unsigned"));case"float32":return xn(e,t,a,4);case"float64":return xn(e,t,a,8);case"utf8":case"large-utf8":{let i=ln(e,t,a,o.type==="large-utf8"?8:4);return Be.decode(i)}case"binary":case"large-binary":return ln(e,t,a,o.type==="large-binary"?8:4).slice();case"utf8-view":return Be.decode(Nn(e,t,a));case"binary-view":return Nn(e,t,a).slice();case"fixed-size-binary":{let i=N(e.data??e.values,t,"fixed-size binary data"),l=a*o.byteWidth;return fe(i,l,l+o.byteWidth,"fixed-size binary data").slice()}case"decimal32":case"decimal64":case"decimal128":case"decimal256":{let i={decimal32:4,decimal64:8,decimal128:16,decimal256:32}[o.type];return Object.freeze({kind:"decimal",unscaled:wt(N(e.values,t,"decimal values"),a*i,i),precision:o.precision,scale:o.scale})}case"date32":return Object.freeze({kind:"date32",value:E(e,t,a,4,"signed")});case"date64":return Object.freeze({kind:"date64",value:$(e,t,a,!0),unit:"millisecond"});case"time32":return Object.freeze({kind:"time32",value:E(e,t,a,4,"signed"),unit:o.unit});case"time64":return Object.freeze({kind:"time64",value:$(e,t,a,!0),unit:o.unit});case"timestamp":return Object.freeze({kind:"timestamp",value:$(e,t,a,!0),unit:o.unit,...o.timezone===void 0?{}:{timezone:o.timezone}});case"duration":return Object.freeze({kind:"duration",value:$(e,t,a,!0),unit:o.unit});case"interval":return gt(e,t,a,o.unit);case"list":case"large-list":case"list-view":case"large-list-view":case"map":return bt(e,t,a,o,r);case"fixed-size-list":{let i=Ne(e,0,"fixed-size list"),l=a*o.listSize;return Object.freeze(Array.from({length:o.listSize},(d,u)=>Y(i,l+u-(i.offset??0),t,r+1)))}case"struct":{let i={};for(let l=0;l<o.fields.length;l+=1){let d=Ne(e,l,"struct");i[o.fields[l].name]=Y(d,a-(d.offset??0),t,r+1)}return Object.freeze(i)}case"union":{let i=N(e.typeIds,t,"union type ids");if(a>=i.byteLength)throw f("Union type id is out of bounds");let l=J(i).getInt8(a),d=o.fields.findIndex(y=>y.typeId===l);if(d<0)throw f(`Union type id ${l} has no child`);let u=Ne(e,d,"union"),c=o.mode==="dense"?Ce(N(e.unionOffsets??e.offsets,t,"union offsets"),a,4):a;return Object.freeze({kind:"union",typeId:l,value:Y(u,c-(u.offset??0),t,r+1)})}case"dictionary":{let i=e.children?.[0]??e,l=e.dictionary??e.children?.[1];if(!l||!i)throw f("Dictionary descriptor has no dictionary values");let d=Mn(i,t,a,o.indexType);if(d<0||d>=l.length)throw f("Dictionary index is out of bounds");return Y(l,d,t,r+1)}case"run-end-encoded":{let i=e.runEnds??e.children?.[0],l=e.children?.[e.runEnds?0:1];if(!i||!l)throw f("Run-end encoded descriptor is incomplete");let d=a+1,u=0;for(;u<i.length&&ht(i,t,u)<d;)u+=1;if(u>=l.length)throw f("Run-end encoded value is out of bounds");return Y(l,u,t,r+1)}case"extension":throw f("Nested extension data type could not be unwrapped")}}function bt(e,n,t,r,a){let o=r.type==="large-list"||r.type==="large-list-view"?8:4,i=N(e.offsets,n,"list offsets"),l=Ce(i,t,o),d=r.type==="list-view"||r.type==="large-list-view"?l+Ce(N(e.sizes,n,"list sizes"),t,o):Ce(i,t+1,o);if(l<0||d<l)throw f("List offsets are invalid");let u=Ne(e,0,r.type),c=Object.freeze(Array.from({length:d-l},(y,p)=>Y(u,l+p-(u.offset??0),n,a+1)));return r.type!=="map"?c:Object.freeze(c.map(y=>{if(!re(y))throw f("Map entries must decode from a struct");let p=y,R=r.entries.dataType,h=R.type==="struct"?R.fields:[],I=h[0]?.name??"key",T=h[1]?.name??"value";return Object.freeze({key:p[I]??null,value:p[T]??null})}))}function gt(e,n,t,r){let a=N(e.values,n,"interval values"),o=J(a);if(r==="year-month")return F(o,t*4,4,"year-month interval"),Object.freeze({kind:"interval",unit:r,months:o.getInt32(t*4,!0)});if(r==="day-time"){let l=t*8;return F(o,l,8,"day-time interval"),Object.freeze({kind:"interval",unit:r,days:o.getInt32(l,!0),milliseconds:o.getInt32(l+4,!0)})}let i=t*16;return F(o,i,16,"month-day-nano interval"),Object.freeze({kind:"interval",unit:r,months:o.getInt32(i,!0),days:o.getInt32(i+4,!0),nanoseconds:o.getBigInt64(i+8,!0)})}function ln(e,n,t,r){let a=N(e.offsets,n,"variable offsets"),o=N(e.data??e.values,n,"variable data"),i=ce(a,t,r),l=ce(a,t+1,r);return fe(o,i,l,"variable data")}function Nn(e,n,t){let r=N(e.values,n,"view values"),a=J(r),o=t*16;F(a,o,16,"view value");let i=a.getInt32(o,!0);if(i<0)throw f("View length must be non-negative");if(i<=12)return fe(r,o+4,o+4+i,"inline view");let l=a.getInt32(o+8,!0),d=a.getInt32(o+12,!0),u=e.variadicBuffers?.[l];if(!u||d<0)throw f("View references an invalid variadic buffer");return fe(z(u,n,"view data"),d,d+i,"view data")}function E(e,n,t,r,a){let o=N(e.values,n,"numeric values"),i=J(o),l=t*r;return F(i,l,r,"numeric value"),r===1?a==="signed"?i.getInt8(l):i.getUint8(l):r===2?a==="signed"?i.getInt16(l,!0):i.getUint16(l,!0):a==="signed"?i.getInt32(l,!0):i.getUint32(l,!0)}function xn(e,n,t,r){let a=N(e.values,n,"floating-point values"),o=J(a),i=t*r;return F(o,i,r,"floating-point value"),r===4?o.getFloat32(i,!0):o.getFloat64(i,!0)}function $(e,n,t,r){let a=N(e.values,n,"64-bit values"),o=J(a),i=t*8;return F(o,i,8,"64-bit value"),r?o.getBigInt64(i,!0):o.getBigUint64(i,!0)}function Mn(e,n,t,r){let a=fn(r).type,o;if(a==="int8")o=E(e,n,t,1,"signed");else if(a==="uint8")o=E(e,n,t,1,"unsigned");else if(a==="int16")o=E(e,n,t,2,"signed");else if(a==="uint16")o=E(e,n,t,2,"unsigned");else if(a==="int32")o=E(e,n,t,4,"signed");else if(a==="uint32")o=E(e,n,t,4,"unsigned");else if(a==="int64")o=$(e,n,t,!0);else if(a==="uint64")o=$(e,n,t,!1);else throw f("Dictionary index type must be an integer");let i=typeof o=="bigint"?Number(o):o;if(!Number.isSafeInteger(i))throw f("Dictionary index exceeds the JavaScript safe integer range");return i}function ht(e,n,t){let r=fn(e.dataType);return Mn({...e,dataType:{type:"dictionary",indexType:r,valueType:{type:"null"}}},n,t,r)}function wt(e,n,t){let r=fe(e,n,n+t,"signed integer"),a=0n;for(let i=r.byteLength-1;i>=0;i-=1)a=a<<8n|BigInt(r[i]);let o=1n<<BigInt(t*8-1);return(a&o)===0n?a:a-(1n<<BigInt(t*8))}function ce(e,n,t){let r=_n(e,n,t,!1);if(r<0)throw f("Offset must be non-negative");return r}function Ce(e,n,t){return _n(e,n,t,!0)}function J(e){let n=e.buffer,t=kn.get(n);t===void 0&&(t=new Map,kn.set(n,t));let r=t.get(e.byteOffset);r===void 0&&(r=new Map,t.set(e.byteOffset,r));let a=r.get(e.byteLength);return a===void 0&&(a=new DataView(e.buffer,e.byteOffset,e.byteLength),r.set(e.byteLength,a)),a}function _n(e,n,t,r){let a=J(e),o=n*t;F(a,o,t,"offset");let i=t===4?r?a.getInt32(o,!0):a.getUint32(o,!0):r?a.getBigInt64(o,!0):a.getBigUint64(o,!0),l=typeof i=="bigint"?Number(i):i;if(!Number.isSafeInteger(l))throw f("Offset exceeds the JavaScript safe integer range");return l}function Dn(e,n,t){if(!e)return!0;let r=z(e,t,"validity bitmap"),a=(e.bitOffset??0)+n;if(a<0||a>>>3>=r.byteLength)throw f("Validity bitmap index is out of bounds");return(r[a>>>3]&1<<(a&7))!==0}function N(e,n,t){if(!e)throw f(`${t} are missing`);return z(e,n,t)}function z(e,n,t){if(!re(e)||!Number.isSafeInteger(e.buffer)||e.buffer<0)throw f(`${t} references an invalid buffer`);let r=n[e.buffer];if(!r)throw f(`${t} references a missing buffer`);let a=e.byteOffset??0,o=e.byteLength??r.byteLength-a;if(!Number.isSafeInteger(a)||a<0||!Number.isSafeInteger(o)||o<0||a+o>r.byteLength)throw f(`${t} region is outside its buffer`);return r.subarray(a,a+o)}function Ne(e,n,t){let r=e.children?.[n];if(!r)throw f(`${t} descriptor has no child ${n}`);return r}function fe(e,n,t,r){if(!Number.isSafeInteger(n)||!Number.isSafeInteger(t)||n<0||t<n||t>e.byteLength)throw f(`${r} slice is out of bounds`);return e.subarray(n,t)}function F(e,n,t,r){if(n<0||n+t>e.byteLength)throw f(`${r} is out of bounds`)}function fn(e){let n=e;for(let t=0;n.type==="extension";t+=1){if(t>=K)throw f("Extension nesting is too deep");n=n.storageType}return n}function Rt(e){return Object.freeze({columnId:e.columnId,native:xe(e.native),display:Object.freeze({...e.display,data:ue(e.display.data),offsets:ue(e.display.offsets),...e.display.validity?{validity:ue(e.display.validity)}:{}})})}function xe(e){let n=t=>t?ue(t):void 0;return Object.freeze({...e,dataType:At(e.dataType),...n(e.validity)?{validity:n(e.validity)}:{},...n(e.values)?{values:n(e.values)}:{},...n(e.offsets)?{offsets:n(e.offsets)}:{},...n(e.sizes)?{sizes:n(e.sizes)}:{},...n(e.data)?{data:n(e.data)}:{},...n(e.typeIds)?{typeIds:n(e.typeIds)}:{},...n(e.unionOffsets)?{unionOffsets:n(e.unionOffsets)}:{},...e.variadicBuffers?{variadicBuffers:Object.freeze(e.variadicBuffers.map(ue))}:{},...e.children?{children:Object.freeze(e.children.map(xe))}:{},...e.dictionary?{dictionary:xe(e.dictionary)}:{},...e.runEnds?{runEnds:xe(e.runEnds)}:{}})}function ue(e){return Object.freeze({...e})}function At(e){return Ot(e,0)}function Ot(e,n){return W(e,n)}function Pn(e){if(e==="second"||e==="millisecond"||e==="microsecond"||e==="nanosecond")return e;throw f("Arrow time unit is invalid")}function It(e){if(e==="year-month"||e==="day-time"||e==="month-day-nano")return e;throw f("Arrow interval unit is invalid")}function Tt(e){let n=(e&32768)===0?1:-1,t=e>>>10&31,r=e&1023;return t===0?n*2**-14*(r/1024):t===31?r===0?n*(1/0):Number.NaN:n*2**(t-15)*(1+r/1024)}function Me(e){let n=e??st;return pn(n,"maxCells"),n}function _e(e,n,t){let r=e*n;if(!Number.isSafeInteger(r)||r>t)throw new j("RESOURCE_LIMIT",`Decoding ${r} cells exceeds the toRows limit of ${t}`,{details:{resource:"row-materialization-cells",required:r,available:t,cellCount:r,maxCells:t}})}function cn(e,n){if(!Number.isSafeInteger(e))throw f(`${n} must be a safe integer`);return e}function dn(e,n){let t=cn(e,n);if(t<=0)throw f(`${n} must be positive`);return t}function vt(e){return e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function re(e){return typeof e=="object"&&e!==null}function De(e,n){if(!Number.isSafeInteger(e)||e<0)throw f(`${n} must be a non-negative safe integer`,{name:n,value:e})}function pn(e,n){if(!Number.isSafeInteger(e)||e<=0)throw f(`${n} must be a positive safe integer`,{name:n,value:e})}var me=class extends Error{constructor(t){super(`The permit queue already has ${t} waiters`);this.maxWaiters=t;this.name="PermitQueueFullError"}maxWaiters},ze=class{#e;#n;#o=[];#t=0;constructor(n,t){if(!Number.isSafeInteger(n)||n<=0)throw new RangeError("maxActive must be a positive safe integer");if(!Number.isSafeInteger(t)||t<0)throw new RangeError("maxWaiters must be a non-negative safe integer");this.#e=n,this.#n=t}acquire(n){return this.#t<this.#e?(this.#t+=1,Promise.resolve(this.#r())):this.#o.length>=this.#n?Promise.reject(new me(this.#n)):new Promise((t,r)=>{this.#o.push({key:n,resolve:t,reject:r})})}cancel(n,t){let r=this.#o.findIndex(o=>o.key===n);if(r<0)return!1;let[a]=this.#o.splice(r,1);return a.reject(t),this.#a(),!0}#r(){let n=!1;return()=>{n||(n=!0,this.#t-=1,this.#a())}}#a(){for(;this.#t<this.#e&&this.#o.length>0;){let n=this.#o.shift();this.#t+=1,n.resolve(this.#r())}}};var s=class extends Error{code;retryable;details;constructor(n,t,r=!1,a,o){super(t,{cause:o}),this.name="ProtocolFault",this.code=n,this.retryable=r,this.details=n==="RESOURCE_LIMIT"?Se(a):a}};function ye(e,n){return e instanceof s?e:m(e)?new s(typeof e.code=="string"?e.code:"RUNTIME_FAILURE",typeof e.message=="string"?e.message:n,e.retryable===!0,e.details,e):e instanceof Error?new s("RUNTIME_FAILURE",e.message||n,!1,void 0,e):new s("RUNTIME_FAILURE",n,!1,{value:String(e)})}function Ue(e,n){let t=ye(e,n),r=t.code==="RESOURCE_LIMIT"?Se(t.details):t.details;return{code:t.code,message:t.message,retryable:t.retryable,...r===void 0?{}:{details:Et(t.code,r)}}}function Et(e,n){if(e!=="RESOURCE_LIMIT"||!m(n))return n;let t=typeof n.resource=="string"?n.resource:typeof n.resourceCategory=="string"?n.resourceCategory:void 0;if(t===void 0||n.resource===t)return n;let{resourceCategory:r,...a}=n;return{...a,resource:t}}var Ve=class e{#e;#n=new Map;constructor(n){this.#e=n}static async load(n,t,r){let a;try{if(a=await import(n),typeof a.default!="function")throw new TypeError("The WebAssembly module does not export a default initializer");await a.default();let o=a.WasmRuntime;if(typeof o!="function")throw new s("PROTOCOL_INCOMPATIBLE",`The ${t} artifact does not export its official runtime class`);let i=new e(new o(r));try{i.#o(t)}catch(l){try{i.dispose()}catch{}throw l}return i}catch(o){throw o instanceof s?o:new s("RUNTIME_FAILURE","Failed to initialize the Tabulark WebAssembly runtime",!1,{moduleUrl:n},o)}}beginOpen(n,t){return this.#r("beginOpen",()=>this.#e.beginOpen(n,t),r=>this.#a(r,"open"))}beginOpenTable(n,t){return this.#r("beginOpenTable",()=>this.#e.beginOpenTable(n,t),r=>this.#a(r,"open-table"))}beginMetadata(n){return this.#r("beginMetadata",()=>this.#e.beginMetadata(n),t=>this.#a(t,"metadata"))}beginPresentation(n){return this.#r("beginPresentation",()=>this.#e.beginPresentation(n),t=>this.#a(t,"presentation"))}beginPresentationRange(n,t){return this.#r("beginPresentationRange",()=>this.#e.beginPresentationRange(n,t),r=>this.#a(r,"presentation-range"))}continueOperation(n,t,r){let a=this.#n.get(n);if(!a)throw new s("PROTOCOL_INCOMPATIBLE","Adapter operation handle is missing or closed");if(t!==a.revision)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter operation revision ${t} is stale; expected ${a.revision}`);let o=Bt(r,a.actions);return this.#r("continueOperation",()=>this.#e.continueOperation(n,t,o),i=>this.#s(i,n,a.revision))}beginRead(n,t){return this.#r("beginRead",()=>this.#e.beginRead(n,t),r=>this.#a(r,"read"))}cancelOperation(n){this.#n.delete(n),this.#t("cancelOperation",()=>this.#e.cancelOperation(n))}closeTable(n){this.#t("closeTable",()=>this.#e.closeTable(n))}closeSource(n){this.#t("closeSource",()=>this.#e.closeSource(n))}shutdown(){this.#n.clear(),this.#t("shutdown",()=>this.#e.shutdown())}dispose(){try{this.shutdown()}catch{}this.#e.free?.()}#o(n){let t=this.#e,r=["protocolVersion","adapterApiVersion","batchLayoutVersion","adapterId","beginOpen","beginOpenTable","beginMetadata","beginPresentation","beginPresentationRange","continueOperation","beginRead","cancelOperation","closeTable","closeSource","shutdown"];for(let d of r)if(typeof t[d]!="function")throw new s("PROTOCOL_INCOMPATIBLE",`WebAssembly adapter does not export ${d}`);let a=this.#t("protocolVersion",()=>this.#e.protocolVersion()),o=this.#t("adapterApiVersion",()=>this.#e.adapterApiVersion()),i=this.#t("batchLayoutVersion",()=>this.#e.batchLayoutVersion()),l=this.#t("adapterId",()=>this.#e.adapterId());if(a!==4||o!==3||i!==1||l!==n)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter ${l} protocol/ABI/layout ${a}/${o}/${i} is incompatible with ${n} ${4}/${3}/${1}`)}#t(n,t){try{return t()}catch(r){throw ye(r,`WebAssembly ${n} failed`)}}#r(n,t,r){let a;try{a=t()}catch(o){throw ye(o,`WebAssembly ${n} failed`)}return Nt(a)?Promise.resolve(a).then(r,o=>{throw ye(o,`WebAssembly ${n} failed`)}):r(a)}#a(n,t){let r=Un(n);if(r.operationRevision!==1)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter ${t} operation must begin at revision 1`);if(this.#n.has(r.operationHandle))throw new s("PROTOCOL_INCOMPATIBLE","Adapter reused an active operation handle");return this.#i(r),r}#s(n,t,r){let a=Un(n);if(a.operationHandle!==t)throw new s("PROTOCOL_INCOMPATIBLE","Adapter changed its operation handle");if(a.operationRevision!==r+1)throw new s("PROTOCOL_INCOMPATIBLE","Adapter returned a missing, duplicate, or stale operation revision");return this.#i(a),a}#i(n){if(n.kind==="complete"){this.#n.delete(n.operationHandle);return}this.#n.set(n.operationHandle,Object.freeze({revision:n.operationRevision,actions:n.actions}))}},zn=32;function Un(e){if(!m(e))throw new s("PROTOCOL_INCOMPATIBLE","Adapter operation step must be an object");let n=e.kind;if(n!=="pending"&&n!=="progress"&&n!=="complete")throw new s("PROTOCOL_INCOMPATIBLE","Adapter operation step has an invalid kind");let t=kt(e.operationHandle,"operationHandle"),r=Ct(e.operationRevision,"operationRevision");if(!Array.isArray(e.actions)||e.actions.length>zn)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter operation step may request at most ${zn} ranges`);let a=new Set,o=0,i=e.actions.map((d,u)=>{if(!m(d)||d.kind!=="read-bytes")throw new s("PROTOCOL_INCOMPATIBLE",`Adapter action ${u} is invalid`);let c=Q(d.actionIndex,`actions[${u}].actionIndex`);if(c>4294967295||a.has(c))throw new s("PROTOCOL_INCOMPATIBLE","Adapter action indexes must be unique u32 values");a.add(c);let y=Q(d.offset,`actions[${u}].offset`),p=Q(d.length,`actions[${u}].length`);if(o+=p,!Number.isSafeInteger(o))throw new s("PROTOCOL_INCOMPATIBLE","Adapter action bytes overflow safe integers");return Object.freeze({kind:"read-bytes",actionIndex:c,offset:y,length:p})}),l=e.cooperativeYield===!0;if(n==="complete"&&(i.length!==0||l))throw new s("PROTOCOL_INCOMPATIBLE","A complete adapter step requested more work");if(n!=="complete"&&i.length===0&&!l)throw new s("PROTOCOL_INCOMPATIBLE","A pending adapter step without ranges must request a cooperative yield");if(i.length!==0&&l)throw new s("PROTOCOL_INCOMPATIBLE","An adapter step cannot combine ranges with a cooperative yield");return Object.freeze({kind:n,operationHandle:t,operationRevision:r,actions:Object.freeze(i),cooperativeYield:l,...St(e)})}function St(e){if(e.payload!==void 0)return Object.freeze({payload:e.payload});let n=Object.fromEntries(Object.entries(e).filter(([t])=>t!=="kind"&&t!=="operationHandle"&&t!=="operationRevision"&&t!=="actions"&&t!=="cooperativeYield"));return Object.keys(n).length===0?Object.freeze({}):Object.freeze({payload:Object.freeze(n)})}function Bt(e,n){if(!Array.isArray(e)||e.length!==n.length)throw new s("PROTOCOL_INCOMPATIBLE","Adapter action results are missing or unexpected");let t=new Map(n.map(o=>[o.actionIndex,o])),r=new Set,a=e.map((o,i)=>{if(!m(o))throw new s("PROTOCOL_INCOMPATIBLE",`Adapter action result ${i} is invalid`);let l=Q(o.actionIndex,"result actionIndex"),d=t.get(l);if(!d||r.has(l))throw new s("PROTOCOL_INCOMPATIBLE","Adapter action result is duplicate or unexpected");r.add(l);let u=Q(o.offset,"result offset");if(u!==d.offset||!(o.bytes instanceof Uint8Array))throw new s("PROTOCOL_INCOMPATIBLE","Adapter action result does not match its range");if(o.bytes.byteLength!==d.length||typeof o.eof!="boolean")throw new s("PROTOCOL_INCOMPATIBLE","Adapter action result has an invalid length or EOF flag");return Object.freeze({actionIndex:l,offset:u,bytes:o.bytes,eof:o.eof})});return Object.freeze(a)}function kt(e,n){return typeof e=="string"&&e.length>0?e:Q(e,n)}function Ct(e,n){let t=Q(e,n);if(t===0)throw new s("PROTOCOL_INCOMPATIBLE",`${n} must be positive`);return t}function Q(e,n){if(!Number.isSafeInteger(e)||e<0)throw new s("PROTOCOL_INCOMPATIBLE",`${n} must be a non-negative safe integer`);return e}function Nt(e){return m(e)&&typeof e.then=="function"}var Hn={manifestVersion:1,adapters:[{id:"tabulark:delimited",entrypoint:".",exportName:"delimitedAdapter",wasm:{packageName:"tabulark-delimited-wasm",crateArtifact:"tabulark_delimited",outputName:"tabulark_delimited",outputDirectory:"dist/wasm/delimited",modulePath:"./wasm/delimited/tabulark_delimited.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["dialect","header","mode","delimiter","sourceName"]},resources:{sourceAccess:"streaming",supportsPresentation:!1,runtimeWeight:1}},{id:"tabulark:arrow-ipc",entrypoint:"./arrow",exportName:"arrowIpcAdapter",wasm:{packageName:"tabulark-arrow-wasm",crateArtifact:"tabulark_arrow",outputName:"tabulark_arrow",outputDirectory:"dist/wasm/arrow",modulePath:"./wasm/arrow/tabulark_arrow.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["container","sourceName"]},resources:{sourceAccess:"range",supportsPresentation:!1,runtimeWeight:1}},{id:"tabulark:parquet",entrypoint:"./parquet",exportName:"parquetAdapter",wasm:{packageName:"tabulark-parquet-wasm",crateArtifact:"tabulark_parquet",outputName:"tabulark_parquet",outputDirectory:"dist/wasm/parquet",modulePath:"./wasm/parquet/tabulark_parquet.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["sourceName"]},resources:{sourceAccess:"range",supportsPresentation:!1,runtimeWeight:2}},{id:"tabulark:excel",entrypoint:"./excel",exportName:"excelAdapter",wasm:{packageName:"tabulark-excel-wasm",crateArtifact:"tabulark_excel",outputName:"tabulark_excel",outputDirectory:"dist/wasm/excel",modulePath:"./wasm/excel/tabulark_excel.js",runtimeExport:"WasmRuntime"},options:{allowedKeys:["format","sourceName"]},resources:{sourceAccess:"range",supportsPresentation:!0,runtimeWeight:2}}]};var Vn=Lt(Hn),ua=Object.freeze(Vn.map(e=>e.id)),Pt=Object.freeze(Vn.map(e=>Object.freeze({...e,wasm:Object.freeze({...e.wasm}),options:Object.freeze({allowedKeys:Object.freeze([...e.options.allowedKeys])}),resources:Object.freeze({...e.resources})}))),jn=new Map(Pt.map(e=>[e.id,e]));function ge(e){return typeof e=="string"&&jn.has(e)}function je(e){let n=jn.get(e);if(!n)throw new TypeError(`Unknown official adapter: ${e}`);return n}function $n(e){return new URL(je(e).wasm.modulePath,import.meta.url).href}function Lt(e){if(!be(e)||e.manifestVersion!==1||!Array.isArray(e.adapters))throw new TypeError("The official adapter manifest has an unsupported shape or version");if(e.adapters.length===0)throw new TypeError("The official adapter manifest must contain at least one adapter");let n=new Set,t=new Set,r=new Set;return e.adapters.map((a,o)=>{if(!be(a))throw new TypeError(`Official adapter manifest entry ${o} must be an object`);let{id:i,entrypoint:l,exportName:d,wasm:u,options:c,resources:y}=a;if(!Mt(i)||n.has(i))throw new TypeError(`Official adapter manifest entry ${o} has an invalid or duplicate id`);if(l!=="."&&l!=="./arrow"&&l!=="./parquet"&&l!=="./excel"||t.has(l)||typeof d!="string"||d.length===0)throw new TypeError(`Official adapter manifest entry ${o} has an invalid entrypoint or export`);if(!be(u)||typeof u.packageName!="string"||typeof u.crateArtifact!="string"||typeof u.outputName!="string"||typeof u.outputDirectory!="string"||!u.outputDirectory.startsWith("dist/wasm/")||u.outputDirectory.includes("..")||r.has(u.outputDirectory)||typeof u.modulePath!="string"||!u.modulePath.startsWith("./wasm/")||u.modulePath.includes("..")||u.modulePath.includes("?")||u.modulePath.includes("#")||u.runtimeExport!=="WasmRuntime"||u.modulePath!==`./${u.outputDirectory.replace(/^dist\//u,"")}/${u.outputName}.js`)throw new TypeError(`Official adapter manifest entry ${o} has an invalid WASM artifact`);if(!be(c)||!Array.isArray(c.allowedKeys)||c.allowedKeys.some(p=>typeof p!="string")||new Set(c.allowedKeys).size!==c.allowedKeys.length)throw new TypeError(`Official adapter manifest entry ${o} has invalid option keys`);if(!be(y)||y.sourceAccess!=="streaming"&&y.sourceAccess!=="range"&&y.sourceAccess!=="staged"||typeof y.supportsPresentation!="boolean"||!Number.isSafeInteger(y.runtimeWeight)||y.runtimeWeight<=0)throw new TypeError(`Official adapter manifest entry ${o} has an invalid resource policy`);return n.add(i),t.add(l),r.add(u.outputDirectory),a})}function Mt(e){return e==="tabulark:delimited"||e==="tabulark:arrow-ipc"||e==="tabulark:parquet"||e==="tabulark:excel"}function be(e){return typeof e=="object"&&e!==null}var Z=2*1024*1024*1024;function Wn(e){return e==="auto"||e==="large"}var $e=class{kind="blob";size;#e;#n=!1;constructor(n){this.#e=n,this.size=n.size}async read(n,t,r={}){if(this.#n)throw r.onSettled?.(),new s("HANDLE_CLOSED","The source is closed");let a=Ut(n,t,this.size);if(a===void 0)throw r.onSettled?.(),new s("RANGE_UNSUPPORTED","The requested source range is outside the source");let o;try{if(o=this.#e.slice(n,a),!o||o.size!==void 0&&o.size!==t)throw new s("RUNTIME_FAILURE","Blob slice returned an invalid bounded length")}catch(d){throw r.onSettled?.(),d instanceof s?d:new s("SOURCE_UNAVAILABLE","The local source could not be sliced",!0,void 0,d)}let i=_t(o,t).finally(()=>r.onSettled?.()),l=r.cancellation===void 0?await i:await Ht(i,r.cancellation);return r.onProviderRead?.(l.byteLength),l}close(){this.#n=!0}};async function _t(e,n){try{let t=e.arrayBuffer,r=typeof t=="function"?await t.call(e):await Dt(e,n);return zt(r,n)}catch(t){throw t instanceof s?t:new s("SOURCE_UNAVAILABLE","The local source could not be read",!0,void 0,t)}}async function Dt(e,n){if(typeof e.stream!="function")throw new TypeError("Blob slices must provide stream() or arrayBuffer()");let t=new Uint8Array(n),r=e.stream().getReader(),a=0;try{for(;;){let o=await r.read();if(o.done)break;let i=o.value instanceof Uint8Array?o.value:new Uint8Array(o.value);if(i.byteLength>n-a)throw new s("RUNTIME_FAILURE","The source provider returned too many bytes");t.set(i,a),a+=i.byteLength}}finally{r.releaseLock()}if(a!==n)throw new s("RUNTIME_FAILURE","The source provider returned too few bytes");return t.buffer}function zt(e,n){if(e instanceof ArrayBuffer){if(e.byteLength!==n)throw new s("RUNTIME_FAILURE","The source provider returned an invalid byte length");return e}if(ArrayBuffer.isView(e)&&e.byteLength===n){let t=new Uint8Array(n);return t.set(new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),t.buffer}throw new s("RUNTIME_FAILURE","The source provider returned an invalid byte buffer")}function Ut(e,n,t){if(!(!Number.isSafeInteger(e)||!Number.isSafeInteger(n)||e<0||n<0||!Number.isSafeInteger(t)||t<0||e>t||n>t-e))return e+n}function Ht(e,n){return Promise.race([e,n.then(()=>{throw new s("CANCELLED","The source read was cancelled")})])}var Yn=1024*1024,Vt=4294967295,jt=Vt,$t=8*Yn,Wt=256,mn=ae+pe,Ft=8*1024*1024,se=globalThis,Xe,We,ie=!1,qt=1,Gt=1,he,yn,bn=0,gn=new Set,Fe=0,qe=0,q=new Map,Ge=new Map,Ye=new Map,we=new Map,B=new Map,te=new Map,O=new Map,Ke=new Map,Kn=new ze(ae,pe);se.addEventListener("message",e=>{Xe?.handle(e.data)||Kt(e.data)});function Xt(){if(We!==void 0)return We;let e=import("./worker-range-source.js").catch(n=>{throw We=void 0,new s("RUNTIME_FAILURE","Failed to initialize the range source runtime",!1,void 0,n)});return We=e,e}function Yt(e){return Xe??=new e.WorkerSourceBroker(se),Xe}async function Kt(e){if(!qr(e))return;let n=e;if(n.protocolVersion!==4){Gn(n.requestId,new s("PROTOCOL_INCOMPATIBLE",`Worker protocol ${4} cannot serve protocol ${String(n.protocolVersion)}`));return}let t=n.measure===!0?{bytesRead:0,peakReservationBytes:0,sourceReads:0,sourceCacheHitBytes:0}:void 0;t&&gn.add(t);try{let r=await Jt(n,t);try{Gr(n.requestId,r.kind,r.data,r.transfer,Xn(t))}finally{r.release?.()}n.op==="listTables"&&Er(n.payload),n.op==="shutdown"&&setTimeout(()=>se.close(),0)}catch(r){Gn(n.requestId,r,Xn(t))}finally{t&&gn.delete(t)}}async function Jt(e,n){switch(e.op){case"hello":return{kind:"hello",data:await Qt(e.payload)};case"openSource":return{kind:"dataset",data:await er(e.requestId,e.payload,n)};case"listTables":return{kind:"tables",data:tr(e.payload)};case"openTable":return{kind:"table",data:await rr(e.requestId,e.payload)};case"getMetadata":return{kind:"metadata",data:await ar(e.requestId,e.payload)};case"getPresentation":return{kind:"presentation",data:await or(e.requestId,e.payload)};case"readPresentationRange":return{kind:"presentationRange",data:await ir(e.requestId,e.payload)};case"readRange":return yr(e.requestId,e.payload,n);case"cancel":return br(e.payload),{kind:"acknowledged"};case"closeTable":return gr(e.payload),{kind:"acknowledged"};case"closeSource":return hr(e.payload),{kind:"acknowledged"};case"shutdown":return await wr(),{kind:"acknowledged"};default:throw new s("INVALID_ARGUMENT",`Unknown operation: ${String(e.op)}`)}}async function Qt(e){let n=w(e,"hello payload");if(!Number.isSafeInteger(n.memoryBudgetBytes)||n.memoryBudgetBytes<=0)throw new s("INVALID_ARGUMENT","memoryBudgetBytes must be a positive safe integer");if(!Array.isArray(n.adapters)||n.adapters.length===0)throw new s("INVALID_ARGUMENT","hello adapters must be a non-empty array");let t=new Map;for(let o of n.adapters){if(!m(o)||!ge(o.id)||Object.keys(o).some(i=>i!=="id"))throw new s("INVALID_ARGUMENT","hello contains an invalid official adapter");if(t.has(o.id))throw new s("INVALID_ARGUMENT",`Adapter ${o.id} is registered more than once`);t.set(o.id,Object.freeze({id:o.id,moduleUrl:_r(o.id)}))}if(he){let o=t.size===q.size&&[...t.keys()].every(i=>q.has(i));if(n.memoryBudgetBytes!==he.memoryBudgetBytes||!o)throw new s("INVALID_ARGUMENT","The Worker hello handshake cannot be reconfigured after initialization");return Fn()}let r=Ln(n.memoryBudgetBytes);q=t,he=r;let a=n.memoryBudgetBytes<Ft?n.memoryBudgetBytes:Math.max(1,r.workerBudgetBytes-r.sourceRangeCacheBytes);return yn=new Pe(a),bn=0,Fn()}function Fn(){return{protocolVersion:4,adapterApiVersion:3,batchLayoutVersion:1,adapters:Object.freeze([...q.keys()]),transferableBatches:!0}}function Zt(e){return{requestId:e,kind:"open",cancelled:!1,cancellation:On()}}function Je(e,n,t){return{requestId:e,kind:"async",datasetHandle:n,...t===void 0?{}:{tableHandle:t},cancelled:!1,cancellation:On()}}function On(){let e;return{promise:new Promise(t=>{e=t}),resolve:e}}async function er(e,n,t){let r=Zt(e);O.set(e,r);let a,o,i,l,d=!1;try{let u=on(),c=w(n,"openSource payload");if(!ge(c.adapterId))throw new s("INVALID_ARGUMENT","openSource adapterId is not registered");if(!q.has(c.adapterId))throw new s("INVALID_ARGUMENT",`Adapter ${c.adapterId} is not registered`);if(!m(c.options)||Array.isArray(c.options))throw new s("INVALID_ARGUMENT","openSource options must be an object");if(m(c.source)&&c.source.kind==="range"){if(c.sourceMode!==void 0||c.transferInput!==void 0)throw new s("INVALID_ARGUMENT","sourceMode and transferInput do not apply to range sources");let x=await Xt(),D=x.validateRangeDescriptor;D(c.source),i=new x.RangeSourceAccessor(c.source,Yt(x),Ar(u),u.mainThreadSourceBytes)}else{let x=c.sourceMode===void 0?"auto":c.sourceMode;if(!Wn(x))throw new s("INVALID_ARGUMENT","openSource sourceMode must be auto or large");let D;if(typeof Blob<"u"&&c.source instanceof Blob)D=c.source;else if(c.source instanceof ArrayBuffer){if(x==="large")throw new s("INVALID_ARGUMENT","sourceMode large requires a local Blob or File source");if(c.source.byteLength>u.maxArrayBufferBytes)throw new s("RESOURCE_LIMIT",`ArrayBuffer sources larger than ${u.maxArrayBufferBytes} bytes must be supplied as a Blob`,!1,{resource:"source-staging",requiredBytes:c.source.byteLength,availableBytes:u.maxArrayBufferBytes});D=new Blob([c.source])}else throw new s("INVALID_ARGUMENT","source must be a Blob, ArrayBuffer, or range source");Or(D,x),Ir(D,c.adapterId),i=new $e(D)}let p=i;if(!p)throw new s("INVALID_ARGUMENT","openSource source is invalid");if(l=Rr(),p.kind==="blob"&&c.sourceMode!=="large"&&c.adapterId==="tabulark:excel"&&p.size>Rn("tabulark:excel",u))throw new s("RESOURCE_LIMIT","Excel auto mode exceeds the source staging limit; use a local Blob with sourceMode: large",!1,{resource:"source-staging",requiredBytes:p.size,availableBytes:Rn("tabulark:excel",u)});let R=await ee(Dr(c.adapterId),r);r.adapter=R;let h=Promise.resolve().then(()=>R.beginOpen(nr(c,u),p.size));h.then(x=>{r.cancelled&&en(R,x,!0)},()=>{});let I=await ee(h,r),T=await Hr(R,p,I,r,c.adapterId,t),b=T.payload,C=T.step.kind==="progress";if(b.sourceHandle===void 0||b.sourceHandle===null)throw new s("RUNTIME_FAILURE","Adapter open did not return a sourceHandle");o=ne(b.sourceHandle,"sourceHandle"),k(r);let L=`d${qt++}`,g=rn(b.metadata,nt(b.table,0)),A=et(Array.isArray(b.tables)?b.tables:void 0,b.table,g),M={handle:L,openRequestId:e,source:p,adapterId:c.adapterId,adapter:R,sourceHandle:o,tables:A,metadata:g,scanOffset:C?0:p.size,scanDone:!C,closed:!1,eventsReady:!1,pendingWarnings:C?[]:Array.isArray(b.warnings)?[...b.warnings]:[],waiters:new Set,releaseSourceSlot:l};return a=M,B.set(L,M),l=void 0,r.datasetHandle=L,C&&(Jn(M,T.step,!1),await dr(M,r),k(r),delete r.operationHandle,M.scanDone?M.pendingProgress=Qn(M):M.scanPromise=ur(M)),Ke.set(e,L),d=!0,{datasetHandle:L}}finally{if(O.delete(e),!d){if(a&&!a.closed)G(a,!1);else if(!a&&o!==void 0)try{r.adapter?.closeSource(o)}catch{}a||i?.close()}l?.()}}function nr(e,n){let t=typeof e.options.sourceName=="string"&&e.options.sourceName.length>0?e.options.sourceName:void 0;if(e.adapterId==="tabulark:delimited"){let a=e.options.delimiter,o=e.options.header,i=e.options.mode;if(!Mr(a))throw new s("INVALID_ARGUMENT","Delimited adapter delimiter must be one non-NUL ASCII byte other than CR, LF, or quote");if(o!=="first-row"&&o!=="none")throw new s("INVALID_ARGUMENT","Delimited adapter header must be first-row or none");if(i!=="lenient"&&i!=="strict")throw new s("INVALID_ARGUMENT","Delimited adapter mode must be lenient or strict");return Object.freeze({delimiter:a,header:o==="first-row",mode:i,checkpointInterval:1024,tableName:t??"Table 1",limits:Object.freeze({maxFieldBytes:n.maxFieldBytes,maxColumns:16384,maxCellsPerRange:25e4,maxBatchBytes:n.maxBatchBytes,maxDiagnostics:1e3})})}if(e.adapterId==="tabulark:arrow-ipc"){let a=e.options.container;if(a!=="auto"&&a!=="file"&&a!=="stream")throw new s("INVALID_ARGUMENT","Arrow adapter container must be auto, file, or stream");return Object.freeze({container:a,tableName:t??"Arrow IPC",limits:Object.freeze({maxSourceBytes:jt,maxDecodedBytes:n.operationBudgetBytes,maxOutputBytes:n.maxBatchBytes,maxMetadataBytes:n.maxFieldBytes,maxBlockBytes:Math.min(64*1024*1024,Math.max(1,Math.floor(n.operationBudgetBytes/4))),streamChunkBytes:Math.min(32*1024,Math.max(1,Math.floor(n.operationBudgetBytes/16))),maxFields:16384,maxNestingDepth:64,maxRangeCells:25e4,maxDisplayCellBytes:Math.min(1024*1024,Math.max(1,Math.floor(n.operationBudgetBytes/16)))})})}if(e.adapterId==="tabulark:parquet")return Object.freeze({sourceName:t??"Parquet"});let r=e.options.format;if(r!=="auto"&&r!=="xls"&&r!=="xlsx")throw new s("INVALID_ARGUMENT","Excel adapter format must be auto, xls, or xlsx");return Object.freeze({format:r,...t===void 0?{}:{sourceName:t}})}function tr(e){let n=w(e,"listTables payload");return le(n.datasetHandle).tables}async function rr(e,n){let t=w(n,"openTable payload"),r=le(t.datasetHandle);if(typeof t.tableId!="string")throw new s("INVALID_ARGUMENT","tableId must be a string");if(!r.tables.some(c=>c.id===t.tableId))throw new s("INVALID_ARGUMENT",`Unknown table: ${t.tableId}`);let a=Je(e,r.handle);a.adapter=r.adapter,O.set(e,a);let o,i=!1,l=!1,d=[],u=c=>{if(!i){i=!0;try{r.adapter.closeTable(c)}catch{}}};try{let c=Promise.resolve().then(()=>r.adapter.beginOpenTable(r.sourceHandle,t.tableId));c.then(g=>{if(!a.cancelled&&!r.closed&&B.get(r.handle)===r&&!ie)return;en(r.adapter,g,!1);let A=vr(g);A!==void 0&&u(A)},()=>{});let y=await ee(c,a),p=await Oe(r.adapter,r.source,y,a,r.adapterId,"open-table");Ae(a,r);let R=p.table,h=m(R)?R:{};wn(d,p,h),o=ne(h.tableHandle??h.handle??R,"openTable tableHandle");let I=r.tables.find(g=>g.id===t.tableId)??{id:t.tableId,name:t.tableId},T=h.metadata;if(T===void 0){let g=await Ze(r.adapter,a,()=>r.adapter.beginMetadata(o)),A=await Oe(r.adapter,r.source,g,a,r.adapterId,"metadata");wn(d,A),T=A.metadata}Ae(a,r);let b=rn(T,I),C=`t${Gt++}`,L={handle:C,datasetHandle:r.handle,tableId:t.tableId,adapterTableHandle:o,metadata:b,closed:!1};return te.set(C,L),l=!0,nn(r,d,{tableHandle:C,tableId:t.tableId,revision:b.revision}),{id:t.tableId,name:r.tables.find(g=>g.id===t.tableId)?.name??t.tableId,tableHandle:C}}finally{O.delete(e),!l&&o!==void 0&&u(o)}}async function ar(e,n){let t=w(n,"getMetadata payload"),r=sn(t.tableHandle),a=le(r.datasetHandle),o=Je(e,a.handle,r.handle);o.adapter=a.adapter,O.set(e,o);try{let i=await Ze(a.adapter,o,()=>a.adapter.beginMetadata(r.adapterTableHandle)),l=await Oe(a.adapter,a.source,i,o,a.adapterId,"metadata");Ae(o,a,r);let d=rn(l.metadata,{id:r.tableId,name:r.metadata.name});return r.metadata=d,In(a,l,r),d}finally{O.delete(e)}}async function or(e,n){let t=w(n,"getPresentation payload"),r=sn(t.tableHandle),a=le(r.datasetHandle),o=Je(e,a.handle,r.handle);o.adapter=a.adapter,O.set(e,o);try{let i=await Ze(a.adapter,o,()=>a.adapter.beginPresentation(r.adapterTableHandle)),l=await Oe(a.adapter,a.source,i,o,a.adapterId,"presentation");Ae(o,a,r);let d=sr(l.presentation,r);return In(a,l,r),d}finally{O.delete(e)}}async function ir(e,n){let t=w(n,"readPresentationRange payload"),r=sn(t.tableHandle),a=le(r.datasetHandle),o=Tn(t.range),i=Je(e,a.handle,r.handle);i.adapter=a.adapter,O.set(e,i);try{let l=await Ze(a.adapter,i,()=>a.adapter.beginPresentationRange(r.adapterTableHandle,o)),d=await Oe(a.adapter,a.source,l,i,a.adapterId,"presentation-range");Ae(i,a,r);let u=lr(d.presentation,r,o);return In(a,d,r),u}finally{O.delete(e)}}function sr(e,n){if(e==null)return null;let t=w(e,"table presentation");if(t.kind!=="spreadsheet-v1")throw new s("PROTOCOL_INCOMPATIBLE","Adapter returned an unknown presentation kind");if(t.tableId!==void 0&&t.tableId!==n.tableId)throw new s("PROTOCOL_INCOMPATIBLE","Adapter presentation belongs to another table");return{...t,kind:"spreadsheet-v1",tableId:n.tableId,revision:v(t.revision,n.metadata.revision)}}function lr(e,n,t){if(e==null)return null;let r=w(e,"presentation range");if(r.kind!=="spreadsheet-v1")throw new s("PROTOCOL_INCOMPATIBLE","Adapter returned an unknown presentation range kind");if(r.tableId!==void 0&&r.tableId!==n.tableId)throw new s("PROTOCOL_INCOMPATIBLE","Adapter presentation range belongs to another table");let a=m(r.range)?Tn(r.range):t;if(a.rowStart!==t.rowStart||a.rowCount!==t.rowCount||a.columnStart!==t.columnStart||a.columnCount!==t.columnCount)throw new s("PROTOCOL_INCOMPATIBLE","Adapter presentation range is not aligned with the requested range");return{...r,kind:"spreadsheet-v1",tableId:n.tableId,revision:v(r.revision,n.metadata.revision),range:a}}function Jn(e,n,t){let r=ve(n,"adapter open progress");if(r.operationKind!=="open")throw new s("PROTOCOL_INCOMPATIBLE","Adapter changed the operation kind while scanning a source");if(ne(r.sourceHandle,"sourceHandle")!==e.sourceHandle)throw new s("PROTOCOL_INCOMPATIBLE","Adapter open changed its sourceHandle");let o=rn(r.metadata,e.tables[0]),i=r.progress===void 0&&n.kind==="complete"?Object.freeze({bytesScanned:e.source.size,rowsDiscovered:Re(o),done:!0}):cr(r.progress,e.source.size);if(i.bytesScanned<e.scanOffset)throw new s("PROTOCOL_INCOMPATIBLE","Adapter scan bytes regressed");let l=JSON.stringify(e.metadata),d=et(Array.isArray(r.tables)?r.tables:void 0,r.table,o);if(n.kind==="complete"!==i.done)throw new s("PROTOCOL_INCOMPATIBLE","Adapter completion and progress disagree");if(i.rowsDiscovered!==Re(o))throw new s("PROTOCOL_INCOMPATIBLE","Adapter progress and metadata row counts disagree");if(!i.done&&n.kind==="complete")throw new s("PROTOCOL_INCOMPATIBLE","Adapter scan completed before progress reached EOF");if(i.done&&n.kind!=="complete")throw new s("PROTOCOL_INCOMPATIBLE","Completed adapter scan returned another read action");e.metadata=o,e.tables=d,e.scanOffset=i.bytesScanned,e.scanDone=i.done,n.kind!=="complete"?(e.scanOperationHandle=n.operationHandle,e.scanStep=n):(delete e.scanOperationHandle,delete e.scanStep),t&&e.eventsReady&&JSON.stringify(o)!==l&&pr(e);let c=Array.isArray(r.warnings)?r.warnings:r.warning===void 0?[]:[r.warning];!t||!e.eventsReady?e.pendingWarnings.push(...c):nn(e,c),t&&fr(e),Qe(e)}async function dr(e,n){for(;!e.closed&&!e.scanDone&&e.scanOffset<Math.min(e.source.size,$t)&&Re(e.metadata)<Wt;)await hn(e,n,!1);if(!e.closed&&e.source.size===0&&!e.scanDone&&await hn(e,n,!1),k(n),e.closed)throw new s("HANDLE_CLOSED","The source was closed while opening")}async function ur(e){try{for(;!e.closed&&!e.scanDone;)await hn(e,void 0,!0)}catch(n){if(e.closed)return;let t=n instanceof s?n:En(n)??new s("RUNTIME_FAILURE","Background source scanning failed",!1,void 0,n);e.scanError=t,e.scanDone=!0,Qe(e);try{V({event:"runtimeError",datasetHandle:e.handle,tableId:e.metadata.tableId,revision:e.metadata.revision,payload:Ue(t,"Background source scanning failed")})}finally{G(e,!0,t)}}}async function hn(e,n,t){if(e.closed||e.scanDone)return;let r=e.scanStep;if(!r)throw new s("PROTOCOL_INCOMPATIBLE","Adapter scan has no pending read action");e.scanOperationHandle=r.operationHandle,n&&(n.operationHandle=r.operationHandle,n.operationRevision=r.operationRevision,k(n));let a=await Ie(e.adapter,e.source,r,n,e.adapterId);for(;!e.closed&&a.kind==="pending";)a=await Ie(e.adapter,e.source,a,n,e.adapterId);if(!e.closed){if(a.kind!=="progress"&&a.kind!=="complete")throw new s("PROTOCOL_INCOMPATIBLE","Adapter scan did not publish progress");Jn(e,a,t),n&&(n.operationHandle=e.scanOperationHandle,e.scanStep?n.operationRevision=e.scanStep.operationRevision:delete n.operationRevision)}}function cr(e,n){let t=w(e,"adapter scan progress"),r=oe(t.bytesScanned,"progress bytesScanned"),a=oe(t.rowsDiscovered,"progress rowsDiscovered");if(r>n||typeof t.done!="boolean")throw new s("PROTOCOL_INCOMPATIBLE","Delimited scan progress is invalid");return Object.freeze({bytesScanned:r,rowsDiscovered:a,done:t.done})}function Re(e){return e.extent.rows.kind==="unknown"?0:e.extent.rows.value}function Qn(e){return Object.freeze({bytesScanned:e.scanOffset,rowsDiscovered:Re(e.metadata),done:e.scanDone})}function fr(e){let n=Qn(e);if(!e.eventsReady){e.pendingProgress=n;return}V({event:"progress",datasetHandle:e.handle,tableId:e.metadata.tableId,revision:e.metadata.revision,payload:{sourceHandle:e.handle,tableId:e.metadata.tableId,revision:e.metadata.revision,...n}})}function pr(e){V({event:"metadata",datasetHandle:e.handle,tableId:e.metadata.tableId,revision:e.metadata.revision,payload:e.metadata});for(let n of te.values())n.datasetHandle===e.handle&&n.tableId===e.metadata.tableId&&!n.closed&&(n.metadata=e.metadata,V({event:"metadata",datasetHandle:e.handle,tableHandle:n.handle,tableId:n.tableId,revision:e.metadata.revision,payload:e.metadata}))}async function mr(e,n,t){if(n.rowCount!==0){for(;!e.scanDone&&Re(e.metadata)<=n.rowStart;)k(t),await new Promise(r=>e.waiters.add(r));if(k(t),e.scanError)throw e.scanError}}function Qe(e){let n=[...e.waiters];e.waiters.clear();for(let t of n)t()}async function yr(e,n,t){let r=w(n,"readRange payload"),a=sn(r.tableHandle),o=le(a.datasetHandle),i=o.adapter,l=Tn(r.range);if(qe>=mn)throw new s("RESOURCE_LIMIT",`The engine may have at most ${mn} in-flight range requests`,!1,{resource:"range-request-slots",required:qe+1,available:mn,maxActiveRanges:ae,maxRangeWaiters:pe});qe+=1;let d={requestId:e,kind:"range",datasetHandle:o.handle,tableHandle:a.handle,adapter:i,cancelled:!1,cancellation:On()};O.set(e,d);let u;try{await mr(o,l,d),k(d);try{u=await Kn.acquire(e)}catch(b){throw b instanceof me?new s("RESOURCE_LIMIT",`The range queue may contain at most ${b.maxWaiters} waiters`,!1,{resource:"range-waiter-slots",required:b.maxWaiters+1,available:b.maxWaiters,maxActiveRanges:ae,maxRangeWaiters:b.maxWaiters}):b}k(d);let c=Promise.resolve().then(()=>i.beginRead(a.adapterTableHandle,l));c.then(b=>{d.cancelled&&en(i,b,!1)},()=>{});let y=await ee(c,d),p=await Vr(i,o.source,y,d,o.adapterId,t);k(d);let R=kr(p),h=vn("batch",R),I;try{I=Br(p,a,o,l)}catch(b){throw h.release(),b}let T=Pr(I);return{kind:"batch",data:I,transfer:T,release:h.release}}finally{O.delete(e),u?.(),qe-=1}}function br(e){let n=w(e,"cancel payload");if(typeof n.targetRequestId!="string")throw new s("INVALID_ARGUMENT","cancel targetRequestId must be a string");let t=O.get(n.targetRequestId);if(t)return tn(t),{cancelled:!0};let r=Ke.get(n.targetRequestId);if(!r)return{cancelled:!1};let a=B.get(r);return!a||a.closed?(Ke.delete(n.targetRequestId),{cancelled:!1}):(G(a,!1),{cancelled:!0})}function gr(e){let n=w(e,"closeTable payload");if(typeof n.tableHandle!="string")throw new s("INVALID_ARGUMENT","tableHandle must be a string");let t=te.get(n.tableHandle);return!t||t.closed?{closed:!0}:(Zn(t,!0),{closed:!0})}function hr(e){let n=w(e,"closeSource payload");if(typeof n.datasetHandle!="string")throw new s("INVALID_ARGUMENT","datasetHandle must be a string");let t=B.get(n.datasetHandle);return!t||t.closed?{closed:!0}:(G(t,!0),{closed:!0})}async function wr(){if(ie)return{closed:!0};ie=!0;let e=new s("HANDLE_CLOSED","The Worker runtime is not available");for(let n of[...O.values()])tn(n,e);for(let n of[...B.values()])G(n,!1,e);Xe?.shutdown();for(let n of Ye.values())n.dispose?.();for(let n of we.values())n.release();return we.clear(),Ye.clear(),Ge.clear(),q.clear(),{closed:!0}}function Rr(){let e=on();if(Fe>=e.maxSources)throw new s("RESOURCE_LIMIT",`The engine may retain at most ${e.maxSources} sources or in-flight opens`,!1,{resource:"source-slots",required:Fe+1,available:e.maxSources,maxSources:e.maxSources});Fe+=1;let n=!1;return()=>{n||(n=!0,Fe-=1)}}function Ar(e){return Math.max(1,Math.floor(e.sourceRangeCacheBytes/Math.max(1,e.maxSources)))}function Or(e,n){let t=e.size;if(!Number.isSafeInteger(t)||t<0)throw new s("RESOURCE_LIMIT","The source size exceeds the JavaScript safe integer range",!1,{resource:"source-staging",requiredBytes:Number.isFinite(t)&&t>=0?Math.min(Math.floor(t),Number.MAX_SAFE_INTEGER):Number.MAX_SAFE_INTEGER,availableBytes:Number.MAX_SAFE_INTEGER});if(n==="large"&&t>Z)throw new s("RESOURCE_LIMIT",`Large source mode supports Blob inputs up to ${Z} bytes`,!1,{resource:"source-staging",requiredBytes:t,availableBytes:Z})}function Ir(e,n){if(!(n!=="tabulark:arrow-ipc"&&n!=="tabulark:excel")&&!(e.size<=Z))throw new s("RESOURCE_LIMIT",`Local ${n==="tabulark:excel"?"Excel":"Arrow IPC"} sources support at most ${Z} bytes`,!1,{resource:"source-staging",requiredBytes:e.size,availableBytes:Z})}function Tr(e,n,t){if(!(!Number.isSafeInteger(e)||!Number.isSafeInteger(n)||e<0||n<0||!Number.isSafeInteger(t)||t<0||e>t||n>t-e))return e+n}function ee(e,n){return Promise.race([e,n.cancellation.promise.then(()=>{throw new s("CANCELLED",n.kind==="open"?"The open request was cancelled":n.kind==="range"?"The range request was cancelled":"The asynchronous table request was cancelled")})])}function Ze(e,n,t){let r=Promise.resolve().then(t);return r.then(a=>{n.cancelled&&en(e,a,!1)},()=>{}),ee(r,n)}function Ae(e,n,t){if(k(e),ie||n.closed||B.get(n.handle)!==n||t!==void 0&&(t.closed||te.get(t.handle)!==t))throw new s("HANDLE_CLOSED","The table or dataset is closed")}function vr(e){let n=m(e)?e:{},t=m(n.payload)?n.payload:n,r=m(t.table)?t.table:t;try{return ne(r.tableHandle??r.handle??e,"openTable tableHandle")}catch{return}}function en(e,n,t){let r=m(n)?n:{},a=m(r.payload)?r.payload:r;if(r.operationHandle!==void 0&&r.operationHandle!==null)try{e.cancelOperation(ne(r.operationHandle,"operationHandle"))}catch{}if(t&&a.sourceHandle!==void 0&&a.sourceHandle!==null)try{e.closeSource(ne(a.sourceHandle,"sourceHandle"))}catch{}}function Er(e){let n=m(e)?e:{};if(typeof n.datasetHandle!="string")return;let t=B.get(n.datasetHandle);if(!(!t||t.closed||t.eventsReady)&&(t.eventsReady=!0,nn(t,t.pendingWarnings.splice(0)),t.pendingProgress)){let r=t.pendingProgress;delete t.pendingProgress,V({event:"progress",datasetHandle:t.handle,tableId:t.metadata.tableId,revision:t.metadata.revision,payload:{sourceHandle:t.handle,tableId:t.metadata.tableId,revision:t.metadata.revision,...r}})}}function wn(e,...n){let t=new Set(e);for(let r of n){if(!m(r))continue;let a=Array.isArray(r.warnings)?r.warnings:r.warning===void 0?[]:[r.warning];for(let o of a)t.has(o)||(t.add(o),e.push(o))}}function In(e,n,t){let r=[];wn(r,n),nn(e,r,{tableHandle:t.handle,tableId:t.tableId,revision:t.metadata.revision})}function nn(e,n,t={}){for(let r of n){let a=m(r)?r:void 0,o=typeof t.tableId=="string"&&e.tables.some(i=>i.id===t.tableId)?t.tableId:typeof a?.tableId=="string"&&e.tables.some(i=>i.id===a.tableId)?a.tableId:e.metadata.tableId;V({event:"warning",datasetHandle:e.handle,...t.tableHandle===void 0?{}:{tableHandle:t.tableHandle},tableId:o,...t.revision===void 0?{}:{revision:t.revision},payload:{...a??{kind:"warning",message:String(r)},handle:t.tableHandle??e.handle,tableId:o}})}}function tn(e,n){if(e.cancelled){e.kind!=="open"&&e.failure===void 0&&n!==void 0&&(e.failure=n);return}if(e.cancelled=!0,e.kind==="open"&&e.datasetHandle){let r=B.get(e.datasetHandle);r&&e.operationHandle!==void 0&&r.scanOperationHandle===e.operationHandle&&delete e.operationHandle}if(an(e),e.cancellation.resolve(),e.kind==="open"){if(e.datasetHandle){let r=B.get(e.datasetHandle);r&&!r.closed&&G(r,!1)}return}if(n!==void 0&&(e.failure=n),e.kind==="async")return;Kn.cancel(e.requestId,n??new s("CANCELLED","The range request was cancelled"));let t=B.get(e.datasetHandle);t&&Qe(t)}function k(e){if(e.cancelled)throw e.kind!=="open"&&e.failure!==void 0?e.failure:new s("CANCELLED",e.kind==="open"?"The open request was cancelled":e.kind==="range"?"The range request was cancelled":"The asynchronous table request was cancelled")}function Zn(e,n,t){e.closed=!0;for(let a of O.values())a.kind!=="open"&&a.tableHandle===e.handle&&tn(a,t);te.delete(e.handle);let r=B.get(e.datasetHandle);if(r)try{r.adapter.closeTable(e.adapterTableHandle)}catch{}n&&V({event:"closed",datasetHandle:e.datasetHandle,tableHandle:e.handle,tableId:e.tableId,revision:e.metadata.revision,payload:{handle:e.handle,kind:"table"}})}function G(e,n,t){if(e.closed=!0,e.pendingWarnings.length=0,delete e.pendingProgress,Ke.delete(e.openRequestId),Qe(e),e.scanOperationHandle!==void 0){let r=e.scanOperationHandle;delete e.scanOperationHandle,delete e.scanStep;for(let a of O.values())a.kind==="open"&&a.datasetHandle===e.handle&&a.operationHandle===r&&delete a.operationHandle;try{e.adapter.cancelOperation(r)}catch{}}for(let r of[...te.values()])r.datasetHandle===e.handle&&Zn(r,n,t);for(let r of O.values())r.datasetHandle===e.handle&&tn(r,t);B.delete(e.handle),e.releaseSourceSlot();try{e.adapter.closeSource(e.sourceHandle)}catch{}try{e.source.close()}catch{}n&&V({event:"closed",datasetHandle:e.handle,tableId:e.metadata.tableId,revision:e.metadata.revision,payload:{handle:e.handle,kind:"source"}})}function Sr(e,n){for(let t of[...B.values()])if(!(t.closed||t.source!==e)){try{V({event:"runtimeError",datasetHandle:t.handle,tableId:t.metadata.tableId,revision:t.metadata.revision,payload:Ue(n,"The source provider failed")})}catch{}G(t,!0,n)}}function Br(e,n,t,r){let a=w(e,"range batch");if(!Array.isArray(a.columns))throw new s("RUNTIME_FAILURE","Range batch columns must be an array");let o=m(a.range)?a.range:{},i={rowStart:v(o.rowStart,r.rowStart),rowCount:v(o.rowCount,0),columnStart:v(o.columnStart,r.columnStart),columnCount:v(o.columnCount,a.columns.length)};if(a.layoutVersion!==1)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter returned batch layout ${String(a.layoutVersion)}; expected ${1}`);let l=Cr(a.buffers),d=a.columns.map((c,y)=>Nr(c,i.rowCount,y)),u={layoutVersion:1,tableId:typeof a.tableId=="string"?a.tableId:n.tableId,revision:v(a.revision,n.metadata.revision),schemaVersion:v(a.schemaVersion,n.metadata.schema.version),range:i,buffers:l,columns:d,complete:a.complete!==!1};return new Le(u),u}function kr(e){let n=w(e,"range batch");if(!Array.isArray(n.buffers))throw new s("RUNTIME_FAILURE","Layout-v1 batch buffers must be an array");let t=0;for(let[r,a]of n.buffers.entries()){let o=a instanceof ArrayBuffer||ArrayBuffer.isView(a)?a.byteLength:void 0;if(o===void 0)throw new s("RUNTIME_FAILURE",`batch buffer ${r} must be a Uint8Array`);if(t+=o,!Number.isSafeInteger(t))throw new s("RESOURCE_LIMIT","Batch buffers exceed the safe integer range",!1,{resource:"batch",requiredBytes:t,availableBytes:Number.MAX_SAFE_INTEGER})}return t}function Cr(e){if(!Array.isArray(e))throw new s("RUNTIME_FAILURE","Layout-v1 batch buffers must be an array");let n=new Set;return e.map((t,r)=>{let a=t instanceof ArrayBuffer?t:ArrayBuffer.isView(t)&&t.buffer instanceof ArrayBuffer&&t.byteOffset===0&&t.byteLength===t.buffer.byteLength?t.buffer:void 0;if(!a)throw new s("PROTOCOL_INCOMPATIBLE",`batch buffer ${r} must own a complete transferable ArrayBuffer`);if(n.has(a))throw new s("PROTOCOL_INCOMPATIBLE",`batch buffer ${r} aliases another pool entry`);return n.add(a),a})}function Nr(e,n,t){let r=w(e,"batch column");return Object.freeze({columnId:typeof r.columnId=="string"?r.columnId:`c${t}`,native:_(r.native,n,0),display:xr(r.display)})}function _(e,n,t){if(t>=64)throw new s("RESOURCE_LIMIT","Native descriptor nesting may not exceed 64",!1,{resource:"descriptor-nesting",required:t+1,available:64});let r=w(e,"native column descriptor"),a=typeof r.encoding=="string"?r.encoding:"",o={...a.length===0?{}:{encoding:a},dataType:r.dataType,length:v(r.length,n),...r.validity===void 0?{}:{validity:S(r.validity,"validity")}};switch(a){case"null":return Object.freeze(o);case"bitmap":return Object.freeze({...o,values:S(r.values,"bitmap values")});case"fixed-width":return Object.freeze({...o,values:S(r.values,"fixed-width values")});case"variable-width":return Object.freeze({...o,offsets:S(r.offsets,"variable-width offsets"),data:S(r.values,"variable-width values")});case"view":return Object.freeze({...o,values:S(r.views,"view records"),variadicBuffers:Object.freeze((Array.isArray(r.buffers)?r.buffers:[]).map(i=>S(i,"view buffer")))});case"list":return Object.freeze({...o,offsets:S(r.offsets,"list offsets"),children:Object.freeze([_(r.values,0,t+1)])});case"list-view":return Object.freeze({...o,offsets:S(r.offsets,"list-view offsets"),sizes:S(r.sizes,"list-view sizes"),children:Object.freeze([_(r.values,0,t+1)])});case"fixed-size-list":return Object.freeze({...o,children:Object.freeze([_(r.values,0,t+1)])});case"struct":return Object.freeze({...o,children:Object.freeze((Array.isArray(r.fields)?r.fields:[]).map(i=>_(i,0,t+1)))});case"union":{let i=Array.isArray(r.fields)?r.fields:[];return Object.freeze({...o,typeIds:S(r.typeIds??r.type_ids,"union type ids"),...r.offsets===void 0?{}:{unionOffsets:S(r.offsets,"union offsets")},children:Object.freeze(i.map(l=>{let d=w(l,"union child");return Object.freeze({..._(d.values,0,t+1),typeId:v(d.typeId,0)})}))})}case"dictionary":return Object.freeze({...o,children:Object.freeze([_(r.keys,o.length,t+1),_(r.values,0,t+1)]),dictionary:_(r.values,0,t+1)});case"run-end-encoded":return Object.freeze({...o,runEnds:_(r.runEnds??r.run_ends,0,t+1),children:Object.freeze([_(r.values,0,t+1)])});default:throw new s("PROTOCOL_INCOMPATIBLE",`Adapter returned an unknown native array encoding: ${a||"<missing>"}`)}}function xr(e){let n=w(e,"display column descriptor");if(n.encoding!=="variable-width")throw new s("PROTOCOL_INCOMPATIBLE","Adapter display columns must use the UTF-8 variable-width layout");return Object.freeze({encoding:"utf8",data:S(n.values,"display values"),offsets:S(n.offsets,"display offsets"),...n.validity===void 0?{}:{validity:S(n.validity,"display validity")}})}function S(e,n){let t=w(e,`${n} region`),r=m(t.buffer)?t.buffer:t;if(!Number.isSafeInteger(r.buffer)||r.buffer<0)throw new s("RUNTIME_FAILURE",`${n} region has an invalid buffer index`);return Object.freeze({buffer:r.buffer,...r.byteOffset===void 0?{}:{byteOffset:v(r.byteOffset,0)},...r.byteLength===void 0?{}:{byteLength:v(r.byteLength,0)},...t.bitOffset===void 0?{}:{bitOffset:v(t.bitOffset,0)}})}function Pr(e){let n=new Set;for(let t of e.buffers)n.add(t instanceof ArrayBuffer?t:t.buffer);return[...n]}function rn(e,n){let t=m(e)?e:{},r=m(t.extent)?t.extent:{},a=m(t.schema)?t.schema:{},o=Array.isArray(a.columns)?a.columns.map((i,l)=>Lr(i,l)):[];return{tableId:typeof t.tableId=="string"?t.tableId:n?.id??"table-0",name:typeof t.name=="string"?t.name:n?.name??"Table 1",revision:v(t.revision,0),extent:{rows:qn(r.rows,"at-least",0),columns:qn(r.columns,"exact",o.length)},schema:{version:v(a.version,0),columns:o},capabilities:m(t.capabilities)?{...t.capabilities,randomAccess:t.capabilities.randomAccess==="full"?"full":"indexed-prefix",typedValues:t.capabilities.typedValues===!0,search:t.capabilities.search===!0,sort:t.capabilities.sort===!0,filter:t.capabilities.filter===!0,multiTable:t.capabilities.multiTable===!0}:{randomAccess:"indexed-prefix",typedValues:!1,search:!1,sort:!1,filter:!1,multiTable:!1}}}function Lr(e,n){let t=m(e)?e:{};return{id:typeof t.id=="string"?t.id:`c${n}`,name:typeof t.name=="string"?t.name:`column_${n+1}`,index:v(t.index,n),dataType:W(t.dataType??{type:"unknown"}),nullable:t.nullable!==!1,...m(t.metadata)?{metadata:Object.freeze(Object.fromEntries(Object.entries(t.metadata).map(([r,a])=>[r,String(a)])))}:{}}}function qn(e,n,t){if(m(e)){if(e.kind==="unknown")return{kind:"unknown"};if((e.kind==="exact"||e.kind==="at-least")&&Number.isSafeInteger(e.value)&&e.value>=0)return{kind:e.kind,value:e.value}}return{kind:n,value:t}}function Mr(e){if(typeof e!="string"||e.length!==1)return!1;let n=e.charCodeAt(0);return n<=127&&n!==0&&n!==13&&n!==10&&n!==34}function et(e,n,t){let a=(Array.isArray(e)&&e.length>0?e:n===void 0?[]:[n]).map((o,i)=>nt(o,i));return a.length>0?a:[{id:t.tableId,name:t.name}]}function nt(e,n){let t=m(e)?e:{};return{id:typeof t.id=="string"?t.id:`table-${n}`,name:typeof t.name=="string"?t.name:`Table ${n+1}`}}function Tn(e){let n=w(e,"range request"),t={rowStart:n.rowStart,rowCount:n.rowCount,columnStart:n.columnStart,columnCount:n.columnCount};for(let[l,d]of Object.entries(t))if(!Number.isSafeInteger(d)||d<0)throw new s("INVALID_RANGE",`${l} must be a non-negative safe integer`);let r=t.rowStart,a=t.rowCount,o=t.columnStart,i=t.columnCount;if(a>Number.MAX_SAFE_INTEGER-r||i>Number.MAX_SAFE_INTEGER-o)throw new s("INVALID_RANGE","Range end exceeds the JavaScript safe integer range");if(a>P||i>P||a!==0&&i>Math.floor(P/a)){let l=a*i,d=Number.isSafeInteger(l)?Math.max(l,a,i):Number.MAX_SAFE_INTEGER;throw new s("RESOURCE_LIMIT",`A range may contain at most ${P} cells`,!1,{resource:"range-cells",required:d,available:P,cells:Number.isSafeInteger(l)?l:Number.MAX_SAFE_INTEGER,limit:P})}return t}function v(e,n){return Number.isSafeInteger(e)&&e>=0?e:n}function _r(e){let t=globalThis.__tabularkTestOnlyAdapterModuleUrls?.[e];return typeof t=="string"&&t.length>0?t:$n(e)}async function Dr(e){if(ie)throw new s("HANDLE_CLOSED","The Worker runtime is not available");let n=q.get(e);if(!n)throw new s("INVALID_ARGUMENT",`Adapter ${e} is not registered`);let t=Ge.get(e);if(t)return t;let r=on();if(!ge(e))throw new s("INVALID_ARGUMENT",`Adapter ${e} is not official`);let a=Rn(e,r),o=vn("adapter-runtime",a);we.set(e,o);let i=Ve.load(n.moduleUrl,n.id,{memoryBudgetBytes:a,indexBudgetBytes:Math.min(r.indexBudgetBytes,Math.floor(a/2)),tileCacheBudgetBytes:Math.min(r.adapterTileCacheBudgetBytes,Math.floor(a/2)),chunkBytes:Math.min(Yn,r.operationBudgetBytes),checkpointRows:1024,maxFieldBytes:r.maxFieldBytes,maxColumns:16384,maxRangeCells:25e4,maxBatchBytes:r.maxBatchBytes,maxSources:r.maxSources,maxActiveRanges:r.maxActiveRanges}).then(l=>{if(ie)throw l.dispose(),new s("HANDLE_CLOSED","The Worker runtime is not available");return Ye.set(e,l),l}).catch(l=>{throw Ge.delete(e),Ye.delete(e),we.get(e)?.release(),we.delete(e),l});return Ge.set(e,i),i}function Rn(e,n){let r=[...q.keys()].filter(ge).reduce((o,i)=>o+je(i).resources.runtimeWeight,0),a=je(e).resources.runtimeWeight;return Math.max(1,Math.floor(n.adapterRuntimePoolBytes*a/Math.max(1,r)))}function An(e){return e==="tabulark:parquet"?"compressed-page":"source-staging"}function zr(e,n){return n.operationBudgetBytes}function Ur(e,n){return vn(An(e),n)}function vn(e,n){let t=Fr(),r=t.reserve(e,n);bn=Math.max(bn,t.usedBytes);for(let a of gn)a.peakReservationBytes=Math.max(a.peakReservationBytes,t.usedBytes);return r}async function Hr(e,n,t,r,a,o){let i=Te(t,"adapter open result"),l=!1,d=!1;try{for(;;){if(k(r),r.operationHandle=i.operationHandle,r.operationRevision=i.operationRevision,i.kind==="progress"){let u=ve(i,"adapter open progress");if(u.operationKind!=="open")throw new s("PROTOCOL_INCOMPATIBLE","Adapter published progress for another operation");return d=!0,Object.freeze({step:i,payload:u})}if(i.kind==="complete"){l=!0,delete r.operationHandle,delete r.operationRevision;let u=ve(i,"adapter open completion");if(u.operationKind!=="open")throw new s("PROTOCOL_INCOMPATIBLE","Adapter completed another operation during open");return Object.freeze({step:i,payload:u})}i=await Ie(e,n,i,r,a,o)}}finally{!l&&!d&&r.operationHandle!==void 0&&an(r,e)}}async function Vr(e,n,t,r,a,o){let i=Te(t,"adapter range result"),l=!1;try{for(;;){if(k(r),r.operationHandle=i.operationHandle,r.operationRevision=i.operationRevision,i.kind==="complete"){l=!0,delete r.operationHandle,delete r.operationRevision;let d=ve(i,"adapter range completion");if(d.operationKind!=="read")throw new s("PROTOCOL_INCOMPATIBLE","Adapter completed another operation during read");return d.batch??d}i=await Ie(e,n,i,r,a,o)}}catch(d){throw tt(r,d),d}finally{!l&&r.operationHandle!==void 0&&an(r,e)}}async function Oe(e,n,t,r,a,o){let i=Te(t,`adapter ${o} result`),l=!1;try{for(;;){if(k(r),r.adapter=e,r.operationHandle=i.operationHandle,r.operationRevision=i.operationRevision,i.kind==="complete"){l=!0,delete r.operationHandle,delete r.operationRevision;let d=ve(i,`adapter ${o} completion`);if(d.operationKind!==o)throw new s("PROTOCOL_INCOMPATIBLE",`Adapter completed ${String(d.operationKind)} while ${o} was active`);return d}i=await Ie(e,n,i,r,a)}}catch(d){throw tt(r,d),d}finally{!l&&r.operationHandle!==void 0&&an(r,e)}}async function Ie(e,n,t,r,a,o){let i=Te(t,"adapter operation step");if(i.kind==="complete")throw new s("PROTOCOL_INCOMPATIBLE","A completed adapter operation was continued");r&&(r.operationHandle=i.operationHandle,r.operationRevision=i.operationRevision,k(r));let l=on(),d=zr(a,l),u=0,c=i.actions.map(h=>{let I=Tr(h.offset,h.length,n.size);if(u+=h.length,!Number.isSafeInteger(u)||I===void 0)throw new s("RESOURCE_LIMIT","Adapter source action exceeds the source or safe integer range",!1,{resource:An(a),requiredBytes:Number.isSafeInteger(u)?u:Number.MAX_SAFE_INTEGER,availableBytes:d,offset:h.offset,sourceLength:n.size});return Object.freeze({action:h,end:I})});if(u>d)throw new s("RESOURCE_LIMIT","Adapter operation actions exceed the operation memory budget",!1,{resource:An(a),requiredBytes:u,availableBytes:d,actionCount:c.length});let y=[],p=[],R=[];try{if(c.length===0){let b=new Promise(C=>globalThis.setTimeout(C,0));r?await ee(b,r):await b}else{try{for(let{action:g}of c)p.push(Ur(a,g.length))}catch(g){for(let A of p)A?.release();throw p.length=0,g}let b=r?.cancellation.promise,C={...b===void 0?{}:{cancellation:b},onProviderRead:g=>Xr(o,g),onCacheHit:g=>Yr(o,g)},L;try{L=n.kind==="range"&&n.readMany!==void 0?await n.readMany(c.map(({action:g,end:A})=>({offset:g.offset,end:A})),C):await jr(n,c,C,p)}catch(g){let A=En(g);throw A!==void 0&&A.code!=="CANCELLED"&&Sr(n,A),g}if(L.length!==c.length)throw new s("RUNTIME_FAILURE","The source accessor returned an invalid action count");for(let g=0;g<c.length;g+=1){let{action:A,end:M}=c[g],x=L[g];if(!(x instanceof ArrayBuffer)||x.byteLength!==A.length)throw new s("RUNTIME_FAILURE","The source accessor returned an invalid bounded length");let D=p[g];if(D===void 0)throw new s("CANCELLED","The source read was cancelled");let Sn=Object.freeze({buffer:x,release:D.release});y.push(Sn);let rt=new Uint8Array(Sn.buffer);R.push(Object.freeze({actionIndex:A.actionIndex,offset:A.offset,bytes:rt,eof:M===n.size})),r&&k(r)}p.length=0}let h=Promise.resolve().then(()=>e.continueOperation(i.operationHandle,i.operationRevision,R)),I=r?await ee(h,r):await h,T=Te(I,"adapter continuation result");if(T.operationHandle!==i.operationHandle||T.operationRevision!==i.operationRevision+1)throw new s("PROTOCOL_INCOMPATIBLE","Adapter continuation returned a missing, duplicate, or stale operation revision");return r&&(r.operationRevision=T.operationRevision),T}finally{for(let h of y)h.release();for(let h of p)h?.release()}}async function jr(e,n,t,r){let a=new Array(n.length),o=0,i=!1,l,d=n.map(()=>({settled:!1,detached:!1})),u=async()=>{for(;;){if(i)return;let c=o++;if(c>=n.length)return;let{action:y}=n[c],p=d[c],R=r[c],h={...t,onSettled:()=>{p.settled=!0,p.detached&&R?.release(),t.onSettled?.()}};try{a[c]=await e.read(y.offset,y.length,h)}catch(I){i||(i=!0,l=I);return}}};if(await Promise.all(Array.from({length:Math.min(4,n.length)},u)),i){for(let c=0;c<d.length;c+=1)d[c].settled||r[c]===void 0||(r[c]=void 0,d[c].detached=!0);throw l}return a}function Te(e,n){let t=w(e,n);if(t.kind!=="pending"&&t.kind!=="progress"&&t.kind!=="complete")throw new s("PROTOCOL_INCOMPATIBLE",`${n} has an invalid kind`);let r=ne(t.operationHandle,`${n} operationHandle`),a=oe(t.operationRevision,`${n} operationRevision`);if(a===0)throw new s("PROTOCOL_INCOMPATIBLE",`${n} operationRevision must be positive`);if(!Array.isArray(t.actions)||t.actions.length>32)throw new s("PROTOCOL_INCOMPATIBLE",`${n} may request at most 32 ranges`);let o=new Set,i=t.actions.map((d,u)=>{let c=w(d,`${n} action ${u}`);if(c.kind!=="read-bytes")throw new s("PROTOCOL_INCOMPATIBLE",`${n} requested an unsupported action`);let y=oe(c.actionIndex,`${n} actionIndex`);if(y>4294967295||o.has(y))throw new s("PROTOCOL_INCOMPATIBLE",`${n} action indexes must be unique u32 values`);o.add(y);let p=oe(c.offset,`${n} action offset`),R=oe(c.length,`${n} action length`);return Object.freeze({kind:"read-bytes",actionIndex:y,offset:p,length:R})}),l=t.cooperativeYield===!0;if(t.kind==="complete"&&(i.length!==0||l))throw new s("PROTOCOL_INCOMPATIBLE",`${n} completion requested more work`);if(t.kind!=="complete"&&i.length===0&&!l)throw new s("PROTOCOL_INCOMPATIBLE",`${n} omitted both actions and a yield`);if(i.length!==0&&l)throw new s("PROTOCOL_INCOMPATIBLE",`${n} combined actions and a yield`);return Object.freeze({kind:t.kind,operationHandle:r,operationRevision:a,actions:Object.freeze(i),cooperativeYield:l,...$r(t)})}function $r(e){if(e.payload!==void 0)return Object.freeze({payload:e.payload});let n=Object.fromEntries(Object.entries(e).filter(([t])=>t!=="kind"&&t!=="operationHandle"&&t!=="operationRevision"&&t!=="actions"&&t!=="cooperativeYield"));return Object.keys(n).length===0?Object.freeze({}):Object.freeze({payload:Object.freeze(n)})}function ve(e,n){return w(e.payload,`${n} payload`)}function an(e,n=e.adapter){let t=e.operationHandle;if(t!==void 0){delete e.operationHandle,delete e.operationRevision;try{n?.cancelOperation(t)}catch{}}}function tt(e,n){if(!("datasetHandle"in e)||e.datasetHandle===void 0||(m(n)&&typeof n.code=="string"?n.code:void 0)!=="SOURCE_CHANGED")return;let r=B.get(e.datasetHandle);r&&!r.closed&&G(r,!0,En(n))}function En(e){if(!m(e)||typeof e.code!="string")return;let n=e.code;if(!(n!=="SOURCE_CHANGED"&&n!=="SOURCE_UNAVAILABLE"&&n!=="RANGE_UNSUPPORTED"&&n!=="RUNTIME_FAILURE"&&n!=="RESOURCE_LIMIT"&&n!=="HANDLE_CLOSED"&&n!=="CANCELLED"&&n!=="PROTOCOL_INCOMPATIBLE"))return e instanceof s?e:new s(n,Wr(n),e.retryable===!0,n==="RESOURCE_LIMIT"?e.details:void 0)}function Wr(e){switch(e){case"SOURCE_CHANGED":return"The source changed while it was open";case"RANGE_UNSUPPORTED":return"The source range is unsupported";case"RUNTIME_FAILURE":return"The source provider returned invalid bytes";case"RESOURCE_LIMIT":return"The source exceeds its configured limit";case"HANDLE_CLOSED":return"The source is closed";case"CANCELLED":return"The source read was cancelled";case"PROTOCOL_INCOMPATIBLE":return"The source broker protocol is incompatible";default:return"The source provider is unavailable"}}function ne(e,n){if(typeof e=="string"&&e.length>0||Number.isSafeInteger(e)&&e>=0)return e;throw new s("PROTOCOL_INCOMPATIBLE",`${n} must be a handle`)}function oe(e,n){if(!Number.isSafeInteger(e)||e<0)throw new s("PROTOCOL_INCOMPATIBLE",`${n} must be a non-negative safe integer`);return e}function on(){if(!he)throw new s("HANDLE_CLOSED","The Worker runtime is not available");return he}function Fr(){if(!yn)throw new s("HANDLE_CLOSED","The Worker memory ledger is not available");return yn}function le(e){if(typeof e!="string")throw new s("INVALID_ARGUMENT","datasetHandle must be a string");let n=B.get(e);if(!n||n.closed)throw new s("HANDLE_CLOSED","The dataset is closed");return n}function sn(e){if(typeof e!="string")throw new s("INVALID_ARGUMENT","tableHandle must be a string");let n=te.get(e);if(!n||n.closed)throw new s("HANDLE_CLOSED","The table is closed");return n}function w(e,n){if(!m(e))throw new s("INVALID_ARGUMENT",`${n} must be an object`);return e}function qr(e){return m(e)&&typeof e.requestId=="string"&&typeof e.op=="string"&&"payload"in e}function Gr(e,n,t,r=[],a){let o={protocolVersion:4,requestId:e,status:"success",result:{...t===void 0?{kind:n}:{kind:n,data:t},...a===void 0?{}:{telemetry:a}}};se.postMessage(o,r)}function Gn(e,n,t){let r={protocolVersion:4,requestId:e,status:"failure",error:Ue(n,"Worker operation failed"),...t===void 0?{}:{telemetry:t}};se.postMessage(r)}function Xr(e,n){!e||!Number.isSafeInteger(n)||n<0||(e.bytesRead=Math.min(Number.MAX_SAFE_INTEGER,e.bytesRead+n),e.sourceReads=Math.min(Number.MAX_SAFE_INTEGER,e.sourceReads+1))}function Yr(e,n){!e||!Number.isSafeInteger(n)||n<0||(e.sourceCacheHitBytes=Math.min(Number.MAX_SAFE_INTEGER,e.sourceCacheHitBytes+n))}function Xn(e){if(e)return Object.freeze({bytesRead:e.bytesRead,peakReservationBytes:e.peakReservationBytes,sourceReads:e.sourceReads,sourceCacheHitBytes:e.sourceCacheHitBytes})}function V(e){se.postMessage({protocolVersion:4,...e})}
|
|
2
2
|
//# sourceMappingURL=worker.js.map
|