@toclocoinc/lattice-grid 1.12.2 → 1.13.0

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Lattice Grid 1.12.2, core + DOM renderer
2
+ * Lattice Grid 1.13.0, core + DOM renderer
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
@@ -16149,6 +16149,577 @@ function createDerivedSource(config,ctx){
16149
16149
  return new DerivedSource(config,ctx);
16150
16150
  }
16151
16151
  });
16152
+ __def("packages/core/src/source/pushdown.js",function(__exports,__req){
16153
+ 'use strict';
16154
+ Object.defineProperty(__exports,"NO_CAPABILITIES",{enumerable:true,get:function(){return NO_CAPABILITIES;}});
16155
+ Object.defineProperty(__exports,"capabilitiesOf",{enumerable:true,get:function(){return capabilitiesOf;}});
16156
+ Object.defineProperty(__exports,"splitFilters",{enumerable:true,get:function(){return splitFilters;}});
16157
+ Object.defineProperty(__exports,"planQuery",{enumerable:true,get:function(){return planQuery;}});
16158
+ Object.defineProperty(__exports,"applyResidual",{enumerable:true,get:function(){return applyResidual;}});
16159
+ Object.defineProperty(__exports,"createPushdownSource",{enumerable:true,get:function(){return createPushdownSource;}});
16160
+ const __m0=__req("packages/core/src/internal/util.js");
16161
+ const isFunction=__m0["isFunction"];
16162
+ const warnOnce=__m0["warnOnce"];
16163
+ const __m1=__req("packages/core/src/source/filterwire.js");
16164
+ const isGroup=__m1["isGroup"];
16165
+ const NO_CAPABILITIES=Object.freeze({
16166
+ filter:false,
16167
+ operators:Object.freeze([]),
16168
+ sort:false,
16169
+ quick:false,
16170
+ range:false,
16171
+ total:false,
16172
+ group:false,
16173
+ });
16174
+ function readPath(row,path){
16175
+ if(!row||typeof path!=='string')return undefined;
16176
+ if(!path.includes('.'))return(row)[path];
16177
+ let cursor=row;
16178
+ for(const part of path.split('.')){
16179
+ if(cursor===null||typeof cursor!=='object')return undefined;
16180
+ cursor=(cursor)[part];
16181
+ }
16182
+ return cursor;
16183
+ }
16184
+ function capabilitiesOf(declared){
16185
+ const caps={...NO_CAPABILITIES,...(declared||{})};
16186
+ caps.operators=new Set(caps.operators||[]);
16187
+ return caps;
16188
+ }
16189
+ function conditionPushable(condition,caps){
16190
+ if(!condition||!condition.op)return false;
16191
+ if(!caps.operators.size)return false;
16192
+ return caps.operators.has(condition.op);
16193
+ }
16194
+ function splitFilters(filters,caps){
16195
+ if(!filters)return{pushed:null,residual:null};
16196
+ if(!caps.filter)return{pushed:null,residual:filters};
16197
+ if(caps.filter==='term'){
16198
+ if(isGroup(filters)){
16199
+ const conditions=filters.conditions||[];
16200
+ if(String(filters.op)!=='and')return{pushed:null,residual:filters};
16201
+ const at=conditions.findIndex((c)=>!isGroup(c)&&conditionPushable(c,caps));
16202
+ if(at<0)return{pushed:null,residual:filters};
16203
+ const rest=conditions.filter((unused,i)=>i!==at);
16204
+ return{
16205
+ pushed:conditions[at],
16206
+ residual:rest.length?{op:'and',conditions:rest}:null,
16207
+ };
16208
+ }
16209
+ return conditionPushable(filters,caps)
16210
+ ?{pushed:filters,residual:null}
16211
+ :{pushed:null,residual:filters};
16212
+ }
16213
+ if(!isGroup(filters)){
16214
+ return conditionPushable(filters,caps)
16215
+ ?{pushed:filters,residual:null}
16216
+ :{pushed:null,residual:filters};
16217
+ }
16218
+ if(String(filters.op)!=='and'){
16219
+ const everyBranch=(filters.conditions||[])
16220
+ .every((c)=>(isGroup(c)?splitFilters(c,caps).residual===null:conditionPushable(c,caps)));
16221
+ return everyBranch?{pushed:filters,residual:null}:{pushed:null,residual:filters};
16222
+ }
16223
+ const pushed=[];
16224
+ const residual=[];
16225
+ for(const condition of filters.conditions||[]){
16226
+ if(isGroup(condition)){
16227
+ if(caps.filter==='flat'){residual.push(condition);continue;}
16228
+ const inner=splitFilters(condition,caps);
16229
+ if(inner.pushed)pushed.push(inner.pushed);
16230
+ if(inner.residual)residual.push(inner.residual);
16231
+ continue;
16232
+ }
16233
+ (conditionPushable(condition,caps)?pushed:residual).push(condition);
16234
+ }
16235
+ const group=(list)=>(list.length===0?null
16236
+ :(list.length===1?list[0]:{op:'and',conditions:list}));
16237
+ return{pushed:group(pushed),residual:group(residual)};
16238
+ }
16239
+ function planQuery(request,caps){
16240
+ const filters=splitFilters(request.filters||null,caps);
16241
+ const unpushed=[];
16242
+ if(filters.residual)unpushed.push('filter');
16243
+ const wanted=request.sort||[];
16244
+ const sortPushable=wanted.length===0
16245
+ ||(caps.sort==='multi'&&wanted.length>=1)
16246
+ ||(caps.sort==='single'&&wanted.length===1);
16247
+ if(!sortPushable&&wanted.length)unpushed.push('sort');
16248
+ const quick=request.quick?String(request.quick):'';
16249
+ const quickPushable=!quick||!!caps.quick;
16250
+ if(!quickPushable)unpushed.push('quick');
16251
+ const residual={
16252
+ filters:filters.residual,
16253
+ sort:sortPushable?null:wanted,
16254
+ quick:quickPushable?'':quick,
16255
+ };
16256
+ const needsAll=!!(residual.filters||residual.sort||residual.quick)||!caps.range;
16257
+ const pushed={
16258
+ ...request,
16259
+ filters:filters.pushed,
16260
+ sort:sortPushable?wanted:[],
16261
+ quick:quickPushable?quick:'',
16262
+ range:needsAll?null:request.range,
16263
+ };
16264
+ return{pushed,residual,needsAll,unpushed};
16265
+ }
16266
+ function applyResidual(rows,residual,compute){
16267
+ if(!residual)return rows;
16268
+ let out=rows;
16269
+ if(residual.filters&&isFunction(compute.evaluateFilters)){
16270
+ const ctx={
16271
+ count:out.length,
16272
+ handle:(col)=>({id:col,get:(i)=>readPath(out[i],col)}),
16273
+ };
16274
+ const mask=compute.evaluateFilters(residual.filters,ctx);
16275
+ const kept=[];
16276
+ for(let i=0;i<out.length;i++)if(mask[i])kept.push(out[i]);
16277
+ out=kept;
16278
+ }
16279
+ if(residual.quick){
16280
+ const needle=residual.quick.toLowerCase();
16281
+ out=out.filter((row)=>{
16282
+ if(!row||typeof row!=='object')return false;
16283
+ for(const value of Object.values((row))){
16284
+ if(value!==null&&value!==undefined
16285
+ &&String(value).toLowerCase().includes(needle))return true;
16286
+ }
16287
+ return false;
16288
+ });
16289
+ }
16290
+ if(residual.sort&&residual.sort.length&&isFunction(compute.sortMulti)){
16291
+ const columns=[...new Set(residual.sort.map((entry)=>entry.col))];
16292
+ const view=out;
16293
+ const handles=columns.map((col)=>({id:col,get:(i)=>readPath(view[i],col)}));
16294
+ const order=compute.sortMulti(
16295
+ handles,
16296
+ residual.sort.map((entry)=>({col:entry.col,dir:entry.dir})),
16297
+ Uint32Array.from({length:out.length},(unused,i)=>i),
16298
+ {},
16299
+ );
16300
+ out=Array.from(order,(i)=>view[i]);
16301
+ }
16302
+ return out;
16303
+ }
16304
+ function planKey(pushed){
16305
+ return JSON.stringify({
16306
+ filters:pushed.filters||null,
16307
+ sort:pushed.sort||[],
16308
+ quick:pushed.quick||'',
16309
+ groupBy:pushed.groupBy||[],
16310
+ groupPath:pushed.groupPath||[],
16311
+ context:pushed.context??null,
16312
+ });
16313
+ }
16314
+ function createPushdownSource(config={}){
16315
+ const adapter=config.adapter;
16316
+ if(!adapter||!isFunction(adapter.execute)){
16317
+ warnOnce('source.pushdown.adapter',
16318
+ 'createPushdownSource needs an `adapter` with an `execute(query)` function.');
16319
+ return{...config,mode:'remote',fetch:async()=>({rows:[],total:0})};
16320
+ }
16321
+ const caps=capabilitiesOf(adapter.capabilities);
16322
+ const name=adapter.name||'adapter';
16323
+ let held=null;
16324
+ let lastPlan=null;
16325
+ const fetch=async(request)=>{
16326
+ const plan=planQuery(request,caps);
16327
+ lastPlan=plan;
16328
+ if(!plan.needsAll){
16329
+ const result=await adapter.execute(plan.pushed,request);
16330
+ return{rows:result.rows||[],total:result.total??(result.rows||[]).length};
16331
+ }
16332
+ if(plan.unpushed.length){
16333
+ warnOnce(`source.pushdown.residual.${name}.${plan.unpushed.join('.')}`,
16334
+ `the ${name} adapter cannot push ${plan.unpushed.join(' or ')}, so every matching row is `
16335
+ +'fetched and the rest is applied in the browser. Correct, and slower than it needs to be: '
16336
+ +'widening the adapter is the fix.');
16337
+ }
16338
+ const key=planKey(plan.pushed);
16339
+ if(!held||held.key!==key){
16340
+ const result=await adapter.execute(plan.pushed,request);
16341
+ const rows=result.rows||[];
16342
+ if(typeof result.total==='number'&&rows.length<result.total){
16343
+ warnOnce(`source.pushdown.partial.${name}`,
16344
+ `the ${name} adapter returned ${rows.length} of ${result.total} matching rows when asked `
16345
+ +'for the whole result, so filtering and sorting would be applied to a fraction of it. '
16346
+ +'The adapter must follow the engine\'s own paging before returning.');
16347
+ }
16348
+ held={key,rows};
16349
+ }
16350
+ const rows=applyResidual(held.rows,plan.residual,config.compute||{});
16351
+ const start=request.range?request.range.start:0;
16352
+ const end=request.range?request.range.end:rows.length;
16353
+ return{rows:rows.slice(start,end),total:rows.length};
16354
+ };
16355
+ return{
16356
+ ...config,
16357
+ mode:'remote',
16358
+ fetch,
16359
+ lastPlan:()=>lastPlan,
16360
+ };
16361
+ }
16362
+ });
16363
+ __def("packages/core/src/source/adapters/odata.js",function(__exports,__req){
16364
+ 'use strict';
16365
+ Object.defineProperty(__exports,"conditionToOData",{enumerable:true,get:function(){return conditionToOData;}});
16366
+ Object.defineProperty(__exports,"filtersToOData",{enumerable:true,get:function(){return filtersToOData;}});
16367
+ Object.defineProperty(__exports,"odataAdapter",{enumerable:true,get:function(){return odataAdapter;}});
16368
+ const __m0=__req("packages/core/src/source/filterwire.js");
16369
+ const isGroup=__m0["isGroup"];
16370
+ const OPERATORS=Object.freeze([
16371
+ 'eq','ne','gt','gte','lt','lte','contains','startsWith','endsWith',
16372
+ 'blank','notBlank',
16373
+ ]);
16374
+ const MAX_SERVER_PAGES=200;
16375
+ const PAGE_GUARD=1000;
16376
+ const COMPARISON=Object.freeze({eq:'eq',ne:'ne',gt:'gt',gte:'ge',lt:'lt',lte:'le'});
16377
+ function literal(value){
16378
+ if(value===null||value===undefined)return'null';
16379
+ if(typeof value==='number'||typeof value==='boolean')return String(value);
16380
+ if(value instanceof Date)return value.toISOString();
16381
+ return`'${String(value).replace(/'/g,"''")}'`;
16382
+ }
16383
+ function conditionToOData(condition){
16384
+ const col=String(condition.col);
16385
+ const op=String(condition.op);
16386
+ if(COMPARISON[op])return`${col} ${COMPARISON[op]} ${literal(condition.value)}`;
16387
+ if(op==='contains')return`contains(${col},${literal(condition.value)})`;
16388
+ if(op==='startsWith')return`startswith(${col},${literal(condition.value)})`;
16389
+ if(op==='endsWith')return`endswith(${col},${literal(condition.value)})`;
16390
+ if(op==='blank')return`(${col} eq null)`;
16391
+ if(op==='notBlank')return`(${col} ne null)`;
16392
+ return null;
16393
+ }
16394
+ function filtersToOData(filters){
16395
+ if(!filters)return'';
16396
+ if(!isGroup(filters))return conditionToOData(filters)||'';
16397
+ const joiner=String(filters.op)==='or'?' or ':' and ';
16398
+ const parts=(filters.conditions||[]).map(filtersToOData).filter(Boolean);
16399
+ if(!parts.length)return'';
16400
+ return parts.length===1?parts[0]:`(${parts.join(joiner)})`;
16401
+ }
16402
+ function odataAdapter(options={}){
16403
+ const base=String(options.url||'');
16404
+ const call=options.fetch||(typeof fetch==='function'?fetch:null);
16405
+ const wantsCount=options.count!==false;
16406
+ return{
16407
+ name:'odata',
16408
+ capabilities:{
16409
+ filter:'tree',
16410
+ operators:OPERATORS,
16411
+ sort:'multi',
16412
+ quick:options.search===true,
16413
+ range:true,
16414
+ total:wantsCount,
16415
+ },
16416
+ urlFor(query){
16417
+ const parts=[];
16418
+ const put=(key,value)=>parts.push(`${key}=${encodeURIComponent(value)}`);
16419
+ const filter=filtersToOData(query.filters);
16420
+ if(filter)put('$filter',filter);
16421
+ if(query.sort&&query.sort.length){
16422
+ put('$orderby',query.sort
16423
+ .map((entry)=>`${entry.col}${entry.dir==='desc'?' desc':' asc'}`).join(','));
16424
+ }
16425
+ if(query.range){
16426
+ put('$skip',String(query.range.start));
16427
+ put('$top',String(query.range.end-query.range.start));
16428
+ }
16429
+ if(query.quick)put('$search',`"${String(query.quick).replace(/"/g,'')}"`);
16430
+ if(wantsCount)put('$count','true');
16431
+ return parts.length?`${base}?${parts.join('&')}`:base;
16432
+ },
16433
+ async execute(query,request){
16434
+ if(!call)throw new Error('odataAdapter needs a fetch implementation');
16435
+ const headers={Accept:'application/json',...(options.headers||{})};
16436
+ const signal=request&&request.signal;
16437
+ const page=async(url)=>{
16438
+ const response=await call(url,{headers,signal});
16439
+ if(!response.ok)throw new Error(`OData request failed: ${response.status}`);
16440
+ return response.json();
16441
+ };
16442
+ let body=await page(this.urlFor(query));
16443
+ let rows=body.value||body.rows||[];
16444
+ const total=body['@odata.count']??body.count??rows.length;
16445
+ if(!query.range){
16446
+ let next=body['@odata.nextLink'];
16447
+ while(next&&rows.length<MAX_SERVER_PAGES*PAGE_GUARD){
16448
+ body=await page(next);
16449
+ rows=rows.concat(body.value||body.rows||[]);
16450
+ next=body['@odata.nextLink'];
16451
+ }
16452
+ }
16453
+ return{rows,total};
16454
+ },
16455
+ };
16456
+ }
16457
+ });
16458
+ __def("packages/core/src/source/adapters/rest.js",function(__exports,__req){
16459
+ 'use strict';
16460
+ Object.defineProperty(__exports,"DEFAULT_PARAMS",{enumerable:true,get:function(){return DEFAULT_PARAMS;}});
16461
+ Object.defineProperty(__exports,"restAdapter",{enumerable:true,get:function(){return restAdapter;}});
16462
+ const DEFAULT_PARAMS=Object.freeze({
16463
+ offset:'offset',
16464
+ limit:'limit',
16465
+ sort:'sort',
16466
+ order:'order',
16467
+ filter:'filter',
16468
+ search:'q',
16469
+ });
16470
+ function restAdapter(options={}){
16471
+ const base=String(options.url||'');
16472
+ const call=options.fetch||(typeof fetch==='function'?fetch:null);
16473
+ const names={...DEFAULT_PARAMS,...(options.params||{})};
16474
+ const encodeFilter=options.encodeFilter||((filters)=>JSON.stringify(filters));
16475
+ const readRows=options.rows||((body)=>(Array.isArray(body)?body:(body.rows||body.data||[])));
16476
+ const readTotal=options.total
16477
+ ||((body,rows)=>(Array.isArray(body)?rows.length:(body.total??body.count??rows.length)));
16478
+ return{
16479
+ name:'rest',
16480
+ capabilities:{
16481
+ range:true,
16482
+ total:true,
16483
+ sort:'multi',
16484
+ filter:false,
16485
+ quick:false,
16486
+ ...(options.capabilities||{}),
16487
+ ...(options.operators?{filter:'tree',operators:options.operators}:{}),
16488
+ },
16489
+ urlFor(query){
16490
+ const params=new URLSearchParams();
16491
+ if(query.range){
16492
+ params.set(names.offset,String(query.range.start));
16493
+ params.set(names.limit,String(query.range.end-query.range.start));
16494
+ }
16495
+ if(query.sort&&query.sort.length){
16496
+ params.set(names.sort,query.sort.map((entry)=>entry.col).join(','));
16497
+ params.set(names.order,query.sort.map((entry)=>entry.dir||'asc').join(','));
16498
+ }
16499
+ if(query.filters)params.set(names.filter,encodeFilter(query.filters));
16500
+ if(query.quick)params.set(names.search,String(query.quick));
16501
+ const qs=params.toString();
16502
+ return qs?`${base}?${qs}`:base;
16503
+ },
16504
+ async execute(query,request){
16505
+ if(!call)throw new Error('restAdapter needs a fetch implementation');
16506
+ const response=await call(this.urlFor(query),{
16507
+ headers:{Accept:'application/json',...(options.headers||{})},
16508
+ signal:request&&request.signal,
16509
+ });
16510
+ if(!response.ok)throw new Error(`request failed: ${response.status}`);
16511
+ const body=await response.json();
16512
+ const rows=readRows(body);
16513
+ return{rows,total:readTotal(body,rows)};
16514
+ },
16515
+ };
16516
+ }
16517
+ });
16518
+ __def("packages/core/src/source/adapters/dfql.js",function(__exports,__req){
16519
+ 'use strict';
16520
+ Object.defineProperty(__exports,"DFQL_BASE",{enumerable:true,get:function(){return DFQL_BASE;}});
16521
+ Object.defineProperty(__exports,"dfqlAdapter",{enumerable:true,get:function(){return dfqlAdapter;}});
16522
+ const DFQL_BASE='https://rest.demandflow.com';
16523
+ async function readNdjson(response){
16524
+ const out=[];
16525
+ const take=(line)=>{
16526
+ const text=line.trim();
16527
+ if(!text)return;
16528
+ try{out.push(JSON.parse(text));}catch{}
16529
+ };
16530
+ if(!response.body||typeof response.body.getReader!=='function'){
16531
+ (await response.text()).split('\n').forEach(take);
16532
+ return out;
16533
+ }
16534
+ const reader=response.body.getReader();
16535
+ const decoder=new TextDecoder();
16536
+ let buffer='';
16537
+ for(;;){
16538
+ const{value,done}=await reader.read();
16539
+ if(done)break;
16540
+ buffer+=decoder.decode(value,{stream:true});
16541
+ const lines=buffer.split('\n');
16542
+ buffer=lines.pop()||'';
16543
+ lines.forEach(take);
16544
+ }
16545
+ take(buffer);
16546
+ return out;
16547
+ }
16548
+ function dfqlAdapter(options={}){
16549
+ const entity=String(options.entity||'');
16550
+ const base=String(options.url||DFQL_BASE).replace(/\/+$/,'');
16551
+ const call=options.fetch||(typeof fetch==='function'?fetch:null);
16552
+ const keyName=String(options.comboKey||'comboKey');
16553
+ const prefix=String(options.query||'SUB');
16554
+ const ceiling=Number.isFinite(Number(options.limit))?Number(options.limit):1000;
16555
+ return{
16556
+ name:'dfql',
16557
+ capabilities:{
16558
+ filter:'term',
16559
+ operators:['contains'],
16560
+ sort:false,
16561
+ quick:false,
16562
+ range:false,
16563
+ total:true,
16564
+ },
16565
+ linesFor(query){
16566
+ const line={entity,comboKey:keyName,query:prefix,limit:ceiling,tag:'rows'};
16567
+ if(options.load&&options.load.length)line.load=options.load.join(',');
16568
+ const condition=query&&query.filters;
16569
+ if(condition&&condition.col&&condition.value!==undefined&&condition.value!==null){
16570
+ line.filter={field:String(condition.col),term:String(condition.value)};
16571
+ }
16572
+ const counted={...line,countOnly:true,tag:'count'};
16573
+ delete counted.load;
16574
+ delete counted.limit;
16575
+ return[line,counted];
16576
+ },
16577
+ async execute(query,request){
16578
+ if(!call)throw new Error('dfqlAdapter needs a fetch implementation');
16579
+ if(!options.token)throw new Error('dfqlAdapter needs a personal access token');
16580
+ const response=await call(`${base}/v1/query`,{
16581
+ method:'POST',
16582
+ headers:{
16583
+ Authorization:`Bearer ${options.token}`,
16584
+ 'Content-Type':'application/json',
16585
+ ...(options.headers||{}),
16586
+ },
16587
+ body:JSON.stringify(this.linesFor(query)),
16588
+ signal:request&&request.signal,
16589
+ });
16590
+ if(!response.ok)throw new Error(`DemandFlow request failed: ${response.status}`);
16591
+ const lines=await readNdjson(response);
16592
+ const failed=lines.find((line)=>line&&line._type==='error');
16593
+ if(failed)throw new Error(`DemandFlow query failed: ${failed.message||'unknown error'}`);
16594
+ const rows=lines.filter((line)=>line&&!line._meta&&line._type===undefined);
16595
+ const counted=lines.find((line)=>line&&line._type==='count');
16596
+ return{rows,total:counted&&typeof counted.count==='number'?counted.count:rows.length};
16597
+ },
16598
+ };
16599
+ }
16600
+ });
16601
+ __def("packages/core/src/source/adapters/duckdb.js",function(__exports,__req){
16602
+ 'use strict';
16603
+ Object.defineProperty(__exports,"filtersToSql",{enumerable:true,get:function(){return filtersToSql;}});
16604
+ Object.defineProperty(__exports,"duckdbAdapter",{enumerable:true,get:function(){return duckdbAdapter;}});
16605
+ const __m0=__req("packages/core/src/internal/util.js");
16606
+ const isFunction=__m0["isFunction"];
16607
+ const warnOnce=__m0["warnOnce"];
16608
+ const __m1=__req("packages/core/src/source/filterwire.js");
16609
+ const isGroup=__m1["isGroup"];
16610
+ const OPERATORS=Object.freeze([
16611
+ 'eq','ne','gt','gte','lt','lte','contains','startsWith','endsWith',
16612
+ 'blank','notBlank','in',
16613
+ ]);
16614
+ const COMPARISON=Object.freeze({eq:'=',ne:'<>',gt:'>',gte:'>=',lt:'<',lte:'<='});
16615
+ const TOTAL='__lattice_total';
16616
+ function ident(name){
16617
+ const text=String(name);
16618
+ if(!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(text)){
16619
+ throw new Error(`duckdbAdapter: "${text}" is not a usable column name`);
16620
+ }
16621
+ return`"${text}"`;
16622
+ }
16623
+ function conditionSql(condition,params){
16624
+ const col=ident(condition.col);
16625
+ const op=String(condition.op);
16626
+ if(COMPARISON[op]){params.push(condition.value);return`${col} ${COMPARISON[op]} ?`;}
16627
+ if(op==='contains'){params.push(`%${condition.value}%`);return`${col} ILIKE ?`;}
16628
+ if(op==='startsWith'){params.push(`${condition.value}%`);return`${col} ILIKE ?`;}
16629
+ if(op==='endsWith'){params.push(`%${condition.value}`);return`${col} ILIKE ?`;}
16630
+ if(op==='blank')return`(${col} IS NULL OR ${col} = '')`;
16631
+ if(op==='notBlank')return`(${col} IS NOT NULL AND ${col} <> '')`;
16632
+ if(op==='in'){
16633
+ const list=Array.isArray(condition.value)?condition.value:[condition.value];
16634
+ if(!list.length)return'FALSE';
16635
+ list.forEach((value)=>params.push(value));
16636
+ return`${col} IN (${list.map(()=>'?').join(', ')})`;
16637
+ }
16638
+ return null;
16639
+ }
16640
+ function filtersToSql(filters,params){
16641
+ if(!filters)return'';
16642
+ if(!isGroup(filters))return conditionSql(filters,params)||'';
16643
+ const joiner=String(filters.op)==='or'?' OR ':' AND ';
16644
+ const parts=(filters.conditions||[])
16645
+ .map((node)=>filtersToSql(node,params))
16646
+ .filter(Boolean);
16647
+ if(!parts.length)return'';
16648
+ return parts.length===1?parts[0]:`(${parts.join(joiner)})`;
16649
+ }
16650
+ function normalise(value){
16651
+ if(typeof value!=='bigint')return value;
16652
+ return value<=BigInt(Number.MAX_SAFE_INTEGER)&&value>=BigInt(Number.MIN_SAFE_INTEGER)
16653
+ ?Number(value)
16654
+ :String(value);
16655
+ }
16656
+ function duckdbAdapter(options={}){
16657
+ const connection=options.connection;
16658
+ const from=String(options.from||'');
16659
+ const projection=Array.isArray(options.fields)&&options.fields.length
16660
+ ?options.fields.map(ident).join(', ')
16661
+ :'*';
16662
+ return{
16663
+ name:'duckdb',
16664
+ capabilities:{
16665
+ filter:'tree',
16666
+ operators:OPERATORS,
16667
+ sort:'multi',
16668
+ quick:false,
16669
+ range:true,
16670
+ total:true,
16671
+ },
16672
+ sqlFor(query){
16673
+ const params=[];
16674
+ const where=filtersToSql(query.filters,params);
16675
+ const order=(query.sort||[])
16676
+ .map((entry)=>`${ident(entry.col)} ${entry.dir==='desc'?'DESC':'ASC'}`)
16677
+ .join(', ');
16678
+ let sql=`SELECT ${projection}, count(*) OVER () AS ${ident(TOTAL)} FROM ${from}`;
16679
+ if(where)sql+=` WHERE ${where}`;
16680
+ if(order)sql+=` ORDER BY ${order}`;
16681
+ if(query.range){
16682
+ sql+=` LIMIT ${Number(query.range.end)-Number(query.range.start)}`;
16683
+ sql+=` OFFSET ${Number(query.range.start)}`;
16684
+ }
16685
+ return{sql,params};
16686
+ },
16687
+ async execute(query){
16688
+ if(!connection||!isFunction(connection.query)){
16689
+ throw new Error('duckdbAdapter needs a connection with a query function');
16690
+ }
16691
+ const{sql,params}=this.sqlFor(query);
16692
+ let result;
16693
+ if(params.length&&isFunction(connection.prepare)){
16694
+ const statement=await connection.prepare(sql);
16695
+ try{
16696
+ result=await statement.query(...params);
16697
+ }finally{
16698
+ if(isFunction(statement.close))await statement.close();
16699
+ }
16700
+ }else{
16701
+ if(params.length){
16702
+ warnOnce('source.duckdb.unprepared',
16703
+ 'this DuckDB connection has no prepare(), so filter values cannot be bound. Filters '
16704
+ +'are not sent rather than being interpolated into SQL.');
16705
+ return{rows:[],total:0};
16706
+ }
16707
+ result=await connection.query(sql);
16708
+ }
16709
+ const raw=isFunction(result.toArray)?result.toArray():Array.from(result||[]);
16710
+ let total=null;
16711
+ const rows=raw.map((row)=>{
16712
+ const plain=isFunction(row.toJSON)?row.toJSON():{...row};
16713
+ if(total===null&&plain[TOTAL]!==undefined)total=Number(normalise(plain[TOTAL]));
16714
+ delete plain[TOTAL];
16715
+ for(const key of Object.keys(plain))plain[key]=normalise(plain[key]);
16716
+ return plain;
16717
+ });
16718
+ return{rows,total:total===null?rows.length:total};
16719
+ },
16720
+ };
16721
+ }
16722
+ });
16152
16723
  __def("packages/core/src/source/index.js",function(__exports,__req){
16153
16724
  'use strict';
16154
16725
  Object.defineProperty(__exports,"createMemorySource",{enumerable:true,get:function(){return createMemorySource;}});
@@ -16192,51 +16763,70 @@ const createDerivedSource=__m5["createDerivedSource"];
16192
16763
  const DerivedSource=__m5["DerivedSource"];
16193
16764
  const IDLE_REFRESH_MS=__m5["IDLE_REFRESH_MS"];
16194
16765
  const PROFILE_FIELDS=__m5["PROFILE_FIELDS"];
16195
- const __m6=__req("packages/core/src/source/derive.js");
16196
- Object.defineProperty(__exports,"derive",{enumerable:true,get:function(){return __m6["derive"];}});
16197
- Object.defineProperty(__exports,"unnest",{enumerable:true,get:function(){return __m6["unnest"];}});
16198
- Object.defineProperty(__exports,"readPath",{enumerable:true,get:function(){return __m6["readPath"];}});
16199
- Object.defineProperty(__exports,"bucketOf",{enumerable:true,get:function(){return __m6["bucketOf"];}});
16200
- Object.defineProperty(__exports,"applyLimit",{enumerable:true,get:function(){return __m6["applyLimit"];}});
16201
- Object.defineProperty(__exports,"applyCumulative",{enumerable:true,get:function(){return __m6["applyCumulative"];}});
16202
- Object.defineProperty(__exports,"reduceValues",{enumerable:true,get:function(){return __m6["reduceValues"];}});
16203
- Object.defineProperty(__exports,"FOLLOW_MODES",{enumerable:true,get:function(){return __m6["FOLLOW_MODES"];}});
16204
- Object.defineProperty(__exports,"BUCKETS",{enumerable:true,get:function(){return __m6["BUCKETS"];}});
16205
- Object.defineProperty(__exports,"DERIVED_ROW_KEY",{enumerable:true,get:function(){return __m6["DERIVED_ROW_KEY"];}});
16206
- const __m7=__req("packages/core/src/source/abort.js");
16207
- Object.defineProperty(__exports,"AbortScope",{enumerable:true,get:function(){return __m7["AbortScope"];}});
16208
- Object.defineProperty(__exports,"RequestToken",{enumerable:true,get:function(){return __m7["RequestToken"];}});
16209
- Object.defineProperty(__exports,"SupersededError",{enumerable:true,get:function(){return __m7["SupersededError"];}});
16210
- Object.defineProperty(__exports,"createAbortScope",{enumerable:true,get:function(){return __m7["createAbortScope"];}});
16211
- Object.defineProperty(__exports,"isAbortError",{enumerable:true,get:function(){return __m7["isAbortError"];}});
16212
- const __m8=__req("packages/core/src/source/filterwire.js");
16213
- Object.defineProperty(__exports,"RELATIVE_TOKENS",{enumerable:true,get:function(){return __m8["RELATIVE_TOKENS"];}});
16214
- Object.defineProperty(__exports,"parseRelativeToken",{enumerable:true,get:function(){return __m8["parseRelativeToken"];}});
16215
- Object.defineProperty(__exports,"resolveRelativeRange",{enumerable:true,get:function(){return __m8["resolveRelativeRange"];}});
16216
- Object.defineProperty(__exports,"resolveRelativeCondition",{enumerable:true,get:function(){return __m8["resolveRelativeCondition"];}});
16217
- Object.defineProperty(__exports,"relativeTokenOf",{enumerable:true,get:function(){return __m8["relativeTokenOf"];}});
16218
- Object.defineProperty(__exports,"buildFilterSet",{enumerable:true,get:function(){return __m8["buildFilterSet"];}});
16219
- Object.defineProperty(__exports,"normaliseFilterSet",{enumerable:true,get:function(){return __m8["normaliseFilterSet"];}});
16220
- Object.defineProperty(__exports,"wireFilters",{enumerable:true,get:function(){return __m8["wireFilters"];}});
16221
- Object.defineProperty(__exports,"querySignature",{enumerable:true,get:function(){return __m8["querySignature"];}});
16222
- Object.defineProperty(__exports,"mapConditions",{enumerable:true,get:function(){return __m8["mapConditions"];}});
16223
- Object.defineProperty(__exports,"forEachCondition",{enumerable:true,get:function(){return __m8["forEachCondition"];}});
16224
- Object.defineProperty(__exports,"isGroup",{enumerable:true,get:function(){return __m8["isGroup"];}});
16225
- const __m9=__req("packages/core/src/source/blockcache.js");
16226
- Object.defineProperty(__exports,"BlockCache",{enumerable:true,get:function(){return __m9["BlockCache"];}});
16227
- Object.defineProperty(__exports,"DEFAULT_PAGE_SIZE",{enumerable:true,get:function(){return __m9["DEFAULT_PAGE_SIZE"];}});
16228
- Object.defineProperty(__exports,"DEFAULT_MAX_CACHED_PAGES",{enumerable:true,get:function(){return __m9["DEFAULT_MAX_CACHED_PAGES"];}});
16229
- const __m10=__req("packages/core/src/source/gapbuffer.js");
16230
- Object.defineProperty(__exports,"GapBuffer",{enumerable:true,get:function(){return __m10["GapBuffer"];}});
16231
- const __m11=__req("packages/core/src/source/rows.js");
16232
- Object.defineProperty(__exports,"RowFactory",{enumerable:true,get:function(){return __m11["RowFactory"];}});
16233
- Object.defineProperty(__exports,"createRowFactory",{enumerable:true,get:function(){return __m11["createRowFactory"];}});
16234
- Object.defineProperty(__exports,"groupKey",{enumerable:true,get:function(){return __m11["groupKey"];}});
16235
- Object.defineProperty(__exports,"lazyRowView",{enumerable:true,get:function(){return __m11["lazyRowView"];}});
16236
- Object.defineProperty(__exports,"DEFAULT_ROW_HEIGHT",{enumerable:true,get:function(){return __m11["DEFAULT_ROW_HEIGHT"];}});
16237
- const __m12=__req("packages/core/src/source/handles.js");
16238
- Object.defineProperty(__exports,"HandleProvider",{enumerable:true,get:function(){return __m12["HandleProvider"];}});
16239
- Object.defineProperty(__exports,"createHandleProvider",{enumerable:true,get:function(){return __m12["createHandleProvider"];}});
16766
+ const __m6=__req("packages/core/src/source/pushdown.js");
16767
+ Object.defineProperty(__exports,"createPushdownSource",{enumerable:true,get:function(){return __m6["createPushdownSource"];}});
16768
+ Object.defineProperty(__exports,"planQuery",{enumerable:true,get:function(){return __m6["planQuery"];}});
16769
+ Object.defineProperty(__exports,"splitFilters",{enumerable:true,get:function(){return __m6["splitFilters"];}});
16770
+ Object.defineProperty(__exports,"applyResidual",{enumerable:true,get:function(){return __m6["applyResidual"];}});
16771
+ Object.defineProperty(__exports,"capabilitiesOf",{enumerable:true,get:function(){return __m6["capabilitiesOf"];}});
16772
+ Object.defineProperty(__exports,"NO_CAPABILITIES",{enumerable:true,get:function(){return __m6["NO_CAPABILITIES"];}});
16773
+ const __m7=__req("packages/core/src/source/adapters/odata.js");
16774
+ Object.defineProperty(__exports,"odataAdapter",{enumerable:true,get:function(){return __m7["odataAdapter"];}});
16775
+ Object.defineProperty(__exports,"filtersToOData",{enumerable:true,get:function(){return __m7["filtersToOData"];}});
16776
+ Object.defineProperty(__exports,"conditionToOData",{enumerable:true,get:function(){return __m7["conditionToOData"];}});
16777
+ const __m8=__req("packages/core/src/source/adapters/rest.js");
16778
+ Object.defineProperty(__exports,"restAdapter",{enumerable:true,get:function(){return __m8["restAdapter"];}});
16779
+ Object.defineProperty(__exports,"DEFAULT_PARAMS",{enumerable:true,get:function(){return __m8["DEFAULT_PARAMS"];}});
16780
+ const __m9=__req("packages/core/src/source/adapters/dfql.js");
16781
+ Object.defineProperty(__exports,"dfqlAdapter",{enumerable:true,get:function(){return __m9["dfqlAdapter"];}});
16782
+ const __m10=__req("packages/core/src/source/adapters/duckdb.js");
16783
+ Object.defineProperty(__exports,"duckdbAdapter",{enumerable:true,get:function(){return __m10["duckdbAdapter"];}});
16784
+ Object.defineProperty(__exports,"filtersToSql",{enumerable:true,get:function(){return __m10["filtersToSql"];}});
16785
+ const __m11=__req("packages/core/src/source/derive.js");
16786
+ Object.defineProperty(__exports,"derive",{enumerable:true,get:function(){return __m11["derive"];}});
16787
+ Object.defineProperty(__exports,"unnest",{enumerable:true,get:function(){return __m11["unnest"];}});
16788
+ Object.defineProperty(__exports,"readPath",{enumerable:true,get:function(){return __m11["readPath"];}});
16789
+ Object.defineProperty(__exports,"bucketOf",{enumerable:true,get:function(){return __m11["bucketOf"];}});
16790
+ Object.defineProperty(__exports,"applyLimit",{enumerable:true,get:function(){return __m11["applyLimit"];}});
16791
+ Object.defineProperty(__exports,"applyCumulative",{enumerable:true,get:function(){return __m11["applyCumulative"];}});
16792
+ Object.defineProperty(__exports,"reduceValues",{enumerable:true,get:function(){return __m11["reduceValues"];}});
16793
+ Object.defineProperty(__exports,"FOLLOW_MODES",{enumerable:true,get:function(){return __m11["FOLLOW_MODES"];}});
16794
+ Object.defineProperty(__exports,"BUCKETS",{enumerable:true,get:function(){return __m11["BUCKETS"];}});
16795
+ Object.defineProperty(__exports,"DERIVED_ROW_KEY",{enumerable:true,get:function(){return __m11["DERIVED_ROW_KEY"];}});
16796
+ const __m12=__req("packages/core/src/source/abort.js");
16797
+ Object.defineProperty(__exports,"AbortScope",{enumerable:true,get:function(){return __m12["AbortScope"];}});
16798
+ Object.defineProperty(__exports,"RequestToken",{enumerable:true,get:function(){return __m12["RequestToken"];}});
16799
+ Object.defineProperty(__exports,"SupersededError",{enumerable:true,get:function(){return __m12["SupersededError"];}});
16800
+ Object.defineProperty(__exports,"createAbortScope",{enumerable:true,get:function(){return __m12["createAbortScope"];}});
16801
+ Object.defineProperty(__exports,"isAbortError",{enumerable:true,get:function(){return __m12["isAbortError"];}});
16802
+ const __m13=__req("packages/core/src/source/filterwire.js");
16803
+ Object.defineProperty(__exports,"RELATIVE_TOKENS",{enumerable:true,get:function(){return __m13["RELATIVE_TOKENS"];}});
16804
+ Object.defineProperty(__exports,"parseRelativeToken",{enumerable:true,get:function(){return __m13["parseRelativeToken"];}});
16805
+ Object.defineProperty(__exports,"resolveRelativeRange",{enumerable:true,get:function(){return __m13["resolveRelativeRange"];}});
16806
+ Object.defineProperty(__exports,"resolveRelativeCondition",{enumerable:true,get:function(){return __m13["resolveRelativeCondition"];}});
16807
+ Object.defineProperty(__exports,"relativeTokenOf",{enumerable:true,get:function(){return __m13["relativeTokenOf"];}});
16808
+ Object.defineProperty(__exports,"buildFilterSet",{enumerable:true,get:function(){return __m13["buildFilterSet"];}});
16809
+ Object.defineProperty(__exports,"normaliseFilterSet",{enumerable:true,get:function(){return __m13["normaliseFilterSet"];}});
16810
+ Object.defineProperty(__exports,"wireFilters",{enumerable:true,get:function(){return __m13["wireFilters"];}});
16811
+ Object.defineProperty(__exports,"querySignature",{enumerable:true,get:function(){return __m13["querySignature"];}});
16812
+ Object.defineProperty(__exports,"mapConditions",{enumerable:true,get:function(){return __m13["mapConditions"];}});
16813
+ Object.defineProperty(__exports,"forEachCondition",{enumerable:true,get:function(){return __m13["forEachCondition"];}});
16814
+ Object.defineProperty(__exports,"isGroup",{enumerable:true,get:function(){return __m13["isGroup"];}});
16815
+ const __m14=__req("packages/core/src/source/blockcache.js");
16816
+ Object.defineProperty(__exports,"BlockCache",{enumerable:true,get:function(){return __m14["BlockCache"];}});
16817
+ Object.defineProperty(__exports,"DEFAULT_PAGE_SIZE",{enumerable:true,get:function(){return __m14["DEFAULT_PAGE_SIZE"];}});
16818
+ Object.defineProperty(__exports,"DEFAULT_MAX_CACHED_PAGES",{enumerable:true,get:function(){return __m14["DEFAULT_MAX_CACHED_PAGES"];}});
16819
+ const __m15=__req("packages/core/src/source/gapbuffer.js");
16820
+ Object.defineProperty(__exports,"GapBuffer",{enumerable:true,get:function(){return __m15["GapBuffer"];}});
16821
+ const __m16=__req("packages/core/src/source/rows.js");
16822
+ Object.defineProperty(__exports,"RowFactory",{enumerable:true,get:function(){return __m16["RowFactory"];}});
16823
+ Object.defineProperty(__exports,"createRowFactory",{enumerable:true,get:function(){return __m16["createRowFactory"];}});
16824
+ Object.defineProperty(__exports,"groupKey",{enumerable:true,get:function(){return __m16["groupKey"];}});
16825
+ Object.defineProperty(__exports,"lazyRowView",{enumerable:true,get:function(){return __m16["lazyRowView"];}});
16826
+ Object.defineProperty(__exports,"DEFAULT_ROW_HEIGHT",{enumerable:true,get:function(){return __m16["DEFAULT_ROW_HEIGHT"];}});
16827
+ const __m17=__req("packages/core/src/source/handles.js");
16828
+ Object.defineProperty(__exports,"HandleProvider",{enumerable:true,get:function(){return __m17["HandleProvider"];}});
16829
+ Object.defineProperty(__exports,"createHandleProvider",{enumerable:true,get:function(){return __m17["createHandleProvider"];}});
16240
16830
  const MODES=Object.freeze(['memory','paged','remote','stream','derived']);
16241
16831
  function createSource(config,ctx){
16242
16832
  if(!ctx)fail('createSource requires a SourceContext');
@@ -39392,6 +39982,20 @@ Object.defineProperty(__exports,"createRemoteSource",{enumerable:true,get:functi
39392
39982
  Object.defineProperty(__exports,"createStreamSource",{enumerable:true,get:function(){return __m10["createStreamSource"];}});
39393
39983
  Object.defineProperty(__exports,"PROTOCOL",{enumerable:true,get:function(){return __m10["PROTOCOL"];}});
39394
39984
  Object.defineProperty(__exports,"MODES",{enumerable:true,get:function(){return __m10["MODES"];}});
39985
+ Object.defineProperty(__exports,"createPushdownSource",{enumerable:true,get:function(){return __m10["createPushdownSource"];}});
39986
+ Object.defineProperty(__exports,"planQuery",{enumerable:true,get:function(){return __m10["planQuery"];}});
39987
+ Object.defineProperty(__exports,"splitFilters",{enumerable:true,get:function(){return __m10["splitFilters"];}});
39988
+ Object.defineProperty(__exports,"applyResidual",{enumerable:true,get:function(){return __m10["applyResidual"];}});
39989
+ Object.defineProperty(__exports,"capabilitiesOf",{enumerable:true,get:function(){return __m10["capabilitiesOf"];}});
39990
+ Object.defineProperty(__exports,"NO_CAPABILITIES",{enumerable:true,get:function(){return __m10["NO_CAPABILITIES"];}});
39991
+ Object.defineProperty(__exports,"odataAdapter",{enumerable:true,get:function(){return __m10["odataAdapter"];}});
39992
+ Object.defineProperty(__exports,"filtersToOData",{enumerable:true,get:function(){return __m10["filtersToOData"];}});
39993
+ Object.defineProperty(__exports,"conditionToOData",{enumerable:true,get:function(){return __m10["conditionToOData"];}});
39994
+ Object.defineProperty(__exports,"restAdapter",{enumerable:true,get:function(){return __m10["restAdapter"];}});
39995
+ Object.defineProperty(__exports,"DEFAULT_PARAMS",{enumerable:true,get:function(){return __m10["DEFAULT_PARAMS"];}});
39996
+ Object.defineProperty(__exports,"dfqlAdapter",{enumerable:true,get:function(){return __m10["dfqlAdapter"];}});
39997
+ Object.defineProperty(__exports,"duckdbAdapter",{enumerable:true,get:function(){return __m10["duckdbAdapter"];}});
39998
+ Object.defineProperty(__exports,"filtersToSql",{enumerable:true,get:function(){return __m10["filtersToSql"];}});
39395
39999
  const __m11=__req("packages/core/src/model/index.js");
39396
40000
  Object.defineProperty(__exports,"RowModel",{enumerable:true,get:function(){return __m11["RowModel"];}});
39397
40001
  Object.defineProperty(__exports,"createRowKey",{enumerable:true,get:function(){return __m11["createRowKey"];}});
@@ -64643,12 +65247,29 @@ Object.defineProperty(__exports,"referencesOf",{enumerable:true,get:function(){r
64643
65247
  Object.defineProperty(__exports,"looksLikeFormula",{enumerable:true,get:function(){return __m4["looksLikeFormula"];}});
64644
65248
  Object.defineProperty(__exports,"FormulaError",{enumerable:true,get:function(){return __m4["FormulaError"];}});
64645
65249
  Object.defineProperty(__exports,"FUNCTIONS",{enumerable:true,get:function(){return __m4["FUNCTIONS"];}});
65250
+ Object.defineProperty(__exports,"compileRules",{enumerable:true,get:function(){return __m4["compileRules"];}});
65251
+ Object.defineProperty(__exports,"ingest",{enumerable:true,get:function(){return __m4["ingest"];}});
65252
+ Object.defineProperty(__exports,"ingestSync",{enumerable:true,get:function(){return __m4["ingestSync"];}});
64646
65253
  Object.defineProperty(__exports,"createSource",{enumerable:true,get:function(){return __m4["createSource"];}});
64647
65254
  Object.defineProperty(__exports,"createMemorySource",{enumerable:true,get:function(){return __m4["createMemorySource"];}});
64648
65255
  Object.defineProperty(__exports,"createPagedSource",{enumerable:true,get:function(){return __m4["createPagedSource"];}});
64649
65256
  Object.defineProperty(__exports,"createRemoteSource",{enumerable:true,get:function(){return __m4["createRemoteSource"];}});
64650
65257
  Object.defineProperty(__exports,"createStreamSource",{enumerable:true,get:function(){return __m4["createStreamSource"];}});
64651
65258
  Object.defineProperty(__exports,"PROTOCOL",{enumerable:true,get:function(){return __m4["PROTOCOL"];}});
65259
+ Object.defineProperty(__exports,"createPushdownSource",{enumerable:true,get:function(){return __m4["createPushdownSource"];}});
65260
+ Object.defineProperty(__exports,"planQuery",{enumerable:true,get:function(){return __m4["planQuery"];}});
65261
+ Object.defineProperty(__exports,"splitFilters",{enumerable:true,get:function(){return __m4["splitFilters"];}});
65262
+ Object.defineProperty(__exports,"applyResidual",{enumerable:true,get:function(){return __m4["applyResidual"];}});
65263
+ Object.defineProperty(__exports,"capabilitiesOf",{enumerable:true,get:function(){return __m4["capabilitiesOf"];}});
65264
+ Object.defineProperty(__exports,"NO_CAPABILITIES",{enumerable:true,get:function(){return __m4["NO_CAPABILITIES"];}});
65265
+ Object.defineProperty(__exports,"odataAdapter",{enumerable:true,get:function(){return __m4["odataAdapter"];}});
65266
+ Object.defineProperty(__exports,"filtersToOData",{enumerable:true,get:function(){return __m4["filtersToOData"];}});
65267
+ Object.defineProperty(__exports,"conditionToOData",{enumerable:true,get:function(){return __m4["conditionToOData"];}});
65268
+ Object.defineProperty(__exports,"restAdapter",{enumerable:true,get:function(){return __m4["restAdapter"];}});
65269
+ Object.defineProperty(__exports,"DEFAULT_PARAMS",{enumerable:true,get:function(){return __m4["DEFAULT_PARAMS"];}});
65270
+ Object.defineProperty(__exports,"dfqlAdapter",{enumerable:true,get:function(){return __m4["dfqlAdapter"];}});
65271
+ Object.defineProperty(__exports,"duckdbAdapter",{enumerable:true,get:function(){return __m4["duckdbAdapter"];}});
65272
+ Object.defineProperty(__exports,"filtersToSql",{enumerable:true,get:function(){return __m4["filtersToSql"];}});
64652
65273
  Object.defineProperty(__exports,"RowModel",{enumerable:true,get:function(){return __m4["RowModel"];}});
64653
65274
  Object.defineProperty(__exports,"createRowKey",{enumerable:true,get:function(){return __m4["createRowKey"];}});
64654
65275
  Object.defineProperty(__exports,"SelectionModel",{enumerable:true,get:function(){return __m4["SelectionModel"];}});
@@ -64840,12 +65461,29 @@ referencesOf=__entry.referencesOf,
64840
65461
  looksLikeFormula=__entry.looksLikeFormula,
64841
65462
  FormulaError=__entry.FormulaError,
64842
65463
  FUNCTIONS=__entry.FUNCTIONS,
65464
+ compileRules=__entry.compileRules,
65465
+ ingest=__entry.ingest,
65466
+ ingestSync=__entry.ingestSync,
64843
65467
  createSource=__entry.createSource,
64844
65468
  createMemorySource=__entry.createMemorySource,
64845
65469
  createPagedSource=__entry.createPagedSource,
64846
65470
  createRemoteSource=__entry.createRemoteSource,
64847
65471
  createStreamSource=__entry.createStreamSource,
64848
65472
  PROTOCOL=__entry.PROTOCOL,
65473
+ createPushdownSource=__entry.createPushdownSource,
65474
+ planQuery=__entry.planQuery,
65475
+ splitFilters=__entry.splitFilters,
65476
+ applyResidual=__entry.applyResidual,
65477
+ capabilitiesOf=__entry.capabilitiesOf,
65478
+ NO_CAPABILITIES=__entry.NO_CAPABILITIES,
65479
+ odataAdapter=__entry.odataAdapter,
65480
+ filtersToOData=__entry.filtersToOData,
65481
+ conditionToOData=__entry.conditionToOData,
65482
+ restAdapter=__entry.restAdapter,
65483
+ DEFAULT_PARAMS=__entry.DEFAULT_PARAMS,
65484
+ dfqlAdapter=__entry.dfqlAdapter,
65485
+ duckdbAdapter=__entry.duckdbAdapter,
65486
+ filtersToSql=__entry.filtersToSql,
64849
65487
  RowModel=__entry.RowModel,
64850
65488
  createRowKey=__entry.createRowKey,
64851
65489
  SelectionModel=__entry.SelectionModel,