@devisfuture/mega-collection 2.4.6 → 2.4.8
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/dist/State-CYIe-3He.d.ts +44 -0
- package/dist/chunks/constants-BXQI1M5E.mjs +1 -0
- package/dist/chunks/internal-COJC3Ik3.mjs +1 -0
- package/dist/chunks/merge-BRXHTBZ0.mjs +1 -0
- package/dist/filter/index.d.ts +111 -0
- package/dist/filter/index.mjs +1 -891
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +1 -2
- package/dist/merge/index.d.ts +128 -0
- package/dist/merge/index.mjs +1 -2
- package/dist/search/index.d.ts +190 -0
- package/dist/search/index.mjs +1 -1010
- package/dist/sort/index.d.ts +55 -0
- package/dist/sort/index.mjs +1 -416
- package/dist/types-DONld7xY.d.ts +74 -0
- package/package.json +14 -34
- package/dist/chunk-BJZg_1dI.mjs +0 -183
- package/dist/chunk-BURK5sks.mjs +0 -505
- package/dist/chunk-C5Zpu_ol.mjs +0 -18
- package/dist/filter/index.d.mts +0 -4
- package/dist/index.d.mts +0 -4
- package/dist/merge/index.d.mts +0 -4
- package/dist/search/index.d.mts +0 -4
- package/dist/sort/index.d.mts +0 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { C as CollectionItem, S as StateOptions, a as StateListener, b as StatePreviousResult, c as StateRegistryFactory, U as UpdateDescriptor, I as IndexableKey } from './types-DONld7xY.js';
|
|
2
|
+
|
|
3
|
+
declare class State<T extends CollectionItem> {
|
|
4
|
+
private originData;
|
|
5
|
+
private filterByPreviousResult;
|
|
6
|
+
private itemIndexLookup;
|
|
7
|
+
private mutationVersion;
|
|
8
|
+
private namespaceSequence;
|
|
9
|
+
private previousResultState;
|
|
10
|
+
private readonly indexMaps;
|
|
11
|
+
private readonly scopedRegistry;
|
|
12
|
+
private readonly listeners;
|
|
13
|
+
constructor(data?: T[], options?: StateOptions);
|
|
14
|
+
subscribe(listener: StateListener<T>): () => void;
|
|
15
|
+
getOriginData(): T[];
|
|
16
|
+
getItemIndex(item: T): number | undefined;
|
|
17
|
+
getMutationVersion(): number;
|
|
18
|
+
isFilterByPreviousResultEnabled(): boolean;
|
|
19
|
+
setFilterByPreviousResult(enabled: boolean): void;
|
|
20
|
+
getPreviousResult(): T[] | null;
|
|
21
|
+
getPreviousResultState(): StatePreviousResult<T> | null;
|
|
22
|
+
setPreviousResult(result: T[], sourceData: T[]): void;
|
|
23
|
+
clearPreviousResult(): void;
|
|
24
|
+
createNamespace(prefix?: string): string;
|
|
25
|
+
getScopedValue<TValue>(namespace: string, key: string): TValue | undefined;
|
|
26
|
+
getOrCreateScopedValue<TValue>(namespace: string, key: string, createValue: StateRegistryFactory<TValue>): TValue;
|
|
27
|
+
setScopedValue<TValue>(namespace: string, key: string, value: TValue): TValue;
|
|
28
|
+
deleteScopedValue(namespace: string, key: string): void;
|
|
29
|
+
clearScope(namespace: string): void;
|
|
30
|
+
data(data: T[]): void;
|
|
31
|
+
add(items: T[]): void;
|
|
32
|
+
update(descriptor: UpdateDescriptor<T>): void;
|
|
33
|
+
clearData(): void;
|
|
34
|
+
removeByFieldValue(field: IndexableKey<T> & string, value: any): void;
|
|
35
|
+
removeByFieldValues(field: IndexableKey<T> & string, values: any[]): void;
|
|
36
|
+
private emit;
|
|
37
|
+
private getOrCreateScope;
|
|
38
|
+
private bumpMutationVersion;
|
|
39
|
+
private getOrCreateIndexMap;
|
|
40
|
+
private rebuildIndexMap;
|
|
41
|
+
private rebuildItemIndexLookup;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { State as S };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=class{constructor(e=[],t={}){this.itemIndexLookup=/* @__PURE__ */new WeakMap,this.mutationVersion=0,this.namespaceSequence=0,this.previousResultState=null,this.indexMaps=/* @__PURE__ */new Map,this.scopedRegistry=/* @__PURE__ */new Map,this.listeners=/* @__PURE__ */new Set,this.originData=e,this.filterByPreviousResult=t.filterByPreviousResult??!1,this.rebuildItemIndexLookup()}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getOriginData(){return this.originData}getItemIndex(e){return this.itemIndexLookup.get(e)}getMutationVersion(){return this.mutationVersion}isFilterByPreviousResultEnabled(){return this.filterByPreviousResult}setFilterByPreviousResult(e){this.filterByPreviousResult=e,e||this.clearPreviousResult()}getPreviousResult(){return this.getPreviousResultState()?.result??null}getPreviousResultState(){return null===this.previousResultState||this.previousResultState.version!==this.mutationVersion?null:this.previousResultState}setPreviousResult(e,t){this.previousResultState={result:e,sourceData:t,version:this.mutationVersion}}clearPreviousResult(){this.previousResultState=null}createNamespace(e="scope"){return this.namespaceSequence+=1,`${e}:${this.namespaceSequence}`}getScopedValue(e,t){return this.scopedRegistry.get(e)?.get(t)}getOrCreateScopedValue(e,t,i){const s=this.getScopedValue(e,t);if(void 0!==s)return s;const o=this.getOrCreateScope(e),n=i();return o.set(t,n),n}setScopedValue(e,t,i){return this.getOrCreateScope(e).set(t,i),i}deleteScopedValue(e,t){const i=this.scopedRegistry.get(e);i&&(i.delete(t),0===i.size&&this.scopedRegistry.delete(e))}clearScope(e){this.scopedRegistry.delete(e)}data(e){this.originData=e,this.bumpMutationVersion(),this.rebuildItemIndexLookup();for(const t of this.indexMaps.keys())this.rebuildIndexMap(t);this.emit({type:"data",data:e})}add(e){if(0===e.length)return;const t=this.originData.length;for(let i=0;i<e.length;i++)this.originData.push(e[i]),this.itemIndexLookup.set(e[i],t+i);this.bumpMutationVersion();for(const[i,s]of this.indexMaps)for(let o=0;o<e.length;o++)s.set(e[o][i],t+o);this.emit({type:"add",items:e,startIndex:t})}update(e){const{field:t,data:i}=e,s=i[t];if(null==s)return;const o=this.getOrCreateIndexMap(t).get(s);if(void 0===o)return;const n=this.originData[o];this.originData[o]=i,this.itemIndexLookup.delete(n),this.itemIndexLookup.set(i,o),this.bumpMutationVersion();for(const[r,a]of this.indexMaps){const e=n[r],t=i[r];e!==t&&(a.get(e)===o&&a.delete(e),a.set(t,o))}this.emit({type:"update",field:t,index:o,previousItem:n,nextItem:i})}clearData(){const e=[];this.originData=e,this.itemIndexLookup=/* @__PURE__ */new WeakMap,this.bumpMutationVersion();for(const t of this.indexMaps.values())t.clear();this.emit({type:"clearData",data:e})}removeByFieldValue(e,t){const i=this.getOrCreateIndexMap(e).get(t);if(void 0===i)return;const s=this.originData.length-1,o=this.originData[i],n=i===s?null:this.originData[s];i!==s&&n&&(this.originData[i]=n,this.itemIndexLookup.set(n,i)),this.originData.pop(),this.itemIndexLookup.delete(o),this.bumpMutationVersion();for(const[r,a]of this.indexMaps){const e=o[r];a.get(e)===i&&a.delete(e),n&&a.set(n[r],i)}this.emit({type:"remove",field:e,value:t,removedItem:o,removedIndex:i,movedItem:n,movedFromIndex:n?s:null})}removeByFieldValues(e,t){if(0===t.length)return;const i=this.getOrCreateIndexMap(e),s=[];for(let o=0;o<t.length;o++){const e=t[o],n=i.get(e);if(void 0===n)continue;const r=this.originData.length-1,a=this.originData[n],u=n===r?null:this.originData[r];n!==r&&u&&(this.originData[n]=u,this.itemIndexLookup.set(u,n)),this.originData.pop(),this.itemIndexLookup.delete(a);for(const[t,i]of this.indexMaps){const e=a[t];i.get(e)===n&&i.delete(e),u&&i.set(u[t],n)}s.push({value:e,removedItem:a,removedIndex:n,movedItem:u,movedFromIndex:u?r:null})}0!==s.length&&(this.bumpMutationVersion(),this.emit({type:"removeMany",field:e,entries:s}))}emit(e){for(const t of this.listeners)t(e)}getOrCreateScope(e){const t=this.scopedRegistry.get(e);if(t)return t;const i=/* @__PURE__ */new Map;return this.scopedRegistry.set(e,i),i}bumpMutationVersion(){this.mutationVersion+=1,this.clearPreviousResult()}getOrCreateIndexMap(e){return this.indexMaps.get(e)||this.rebuildIndexMap(e)}rebuildIndexMap(e){const t=/* @__PURE__ */new Map;for(let i=0;i<this.originData.length;i++)t.set(this.originData[i][e],i);return this.indexMaps.set(e,t),t}rebuildItemIndexLookup(){this.itemIndexLookup=/* @__PURE__ */new WeakMap;for(let e=0;e<this.originData.length;e++)this.itemIndexLookup.set(this.originData[e],e)}},t="__merge__",i="deferFilterMutationIndexUpdates",s="deferSearchMutationIndexUpdates",o="deferSortMutationCacheUpdates";export{e as a,t as i,s as n,o as r,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function n(n){return{value:n,enumerable:!1,configurable:!0,writable:!0}}function e(n){const e=n.indexOf(".");return-1===e?null:{collectionKey:n.substring(0,e),nestedKey:n.substring(e+1)}}export{e as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as t,i as e,n as i,r,t as s}from"./constants-BXQI1M5E.mjs";import{t as a}from"./internal-COJC3Ik3.mjs";var n=class{constructor(t){this.callbacks=t}create(t){const e=t;return Object.defineProperties(e,{search:a((t,e)=>void 0===e?this.callbacks.search(t):this.callbacks.search(t,e)),sort:a((e,i,r)=>void 0===i?this.callbacks.sort(t,e,r):this.callbacks.sort(e,i,r)),filter:a((e,i)=>void 0===i?this.callbacks.filter(t,e):this.callbacks.filter(e,i)),add:a(t=>this.callbacks.add(t)),update:a(t=>this.callbacks.update(t)),clearIndexes:a(e=>(this.callbacks.clearIndexes(e),this.create(t))),clearData:a(e=>(this.callbacks.clearData(e),this.create(t))),data:a(t=>this.callbacks.data(t)),getOriginData:a(()=>this.callbacks.getOriginData())}),e}};function o(t){return"object"==typeof t&&null!==t}function l(t,e){return o(t)&&"function"==typeof t[e]}function u(t){return l(t,"search")&&l(t,"getOriginData")}function h(t){return l(t,"sort")&&l(t,"getOriginData")}function c(t){return l(t,"rawFilter")&&l(t,"getOriginData")}var d=t=>{const{prototype:e}=t;return c(e)?"filter":h(e)?"sort":u(e)?"search":null},p=(t,e,i,r)=>{const s=new t({data:e,state:i,...r});return c(s)?{moduleName:"filter",executeFilter:(t,e)=>void 0===e?s.rawFilter(t):s.rawFilter(t,e),clearIndexes:()=>s.clearIndexes()}:h(s)?{moduleName:"sort",executeSort:(t,e,i)=>void 0===e?s.sort(t):s.sort(t,e,i),clearIndexes:()=>s.clearIndexes()}:u(s)?{moduleName:"search",executeSearch:(t,e)=>void 0===e?s.search(t):s.search(t,e),clearIndexes:()=>s.clearIndexes()}:null},g={search:"TextSearchEngine",sort:"SortEngine",filter:"FilterEngine"},v=class t extends Error{constructor(t){super(t),this.name="MergeEnginesError"}static unavailableEngine(e){return new t(`MergeEngines: ${g[e]} is not available.`)}static unavailableGetOriginData(){return new t("MergeEngines: getOriginData is not available.")}static invalidFilterByPreviousResultOption(){return new t('MergeEngines: "filter.filterByPreviousResult" is not supported. Configure "filterByPreviousResult" on the MergeEngines root options.')}},S=class{constructor(a){this.previousSearchState=null,this.previousFilterState=null,this.previousSortState=null;const{imports:o,data:l,filterByPreviousResult:u=!1,...h}=a;this.validateFilterByPreviousResultOptions(h.filter),this.state=new t(l,{filterByPreviousResult:u});const c=new Set(o);let g=null,v=null,S=null;for(const t of c){const e=d(t);if(!e)continue;const i=this.getModuleInitOptions(e,t.name,h),r=p(t,l,this.state,i);r&&("search"!==r.moduleName||g||(g=r),"sort"!==r.moduleName||v||(v=r),"filter"!==r.moduleName||S||(S=r))}this.searchModule=g,this.sortModule=v,this.filterModule=S,this.sortModule&&this.state.setScopedValue(e,r,!0),this.searchModule&&this.state.setScopedValue(e,i,!0),this.filterModule&&this.state.setScopedValue(e,s,!0),this.state.subscribe(t=>this.handleStateMutation(t)),this.chainBuilder=new n({search:(t,e)=>void 0===e?this.search(t):this.search(t,e),sort:(t,e,i)=>this.sort(t,e,i),filter:(t,e)=>this.filter(t,e),getOriginData:()=>this.getOriginData(),add:t=>this.add(t),update:t=>this.update(t),data:t=>this.data(t),clearIndexes:t=>this.clearIndexes(t),clearData:t=>this.clearData(t)})}getAdapter(t){return"search"===t?this.searchModule:"sort"===t?this.sortModule:this.filterModule}getModuleInitOptions(t,e,i){const r={};for(const s of[t,e]){const t=i[s];o(t)&&Object.assign(r,t)}return r}validateFilterByPreviousResultOptions(t){if(o(t)&&Object.prototype.hasOwnProperty.call(t,"filterByPreviousResult"))throw v.invalidFilterByPreviousResultOption()}isPreviousResultEnabled(){return this.state.isFilterByPreviousResultEnabled()}getPreviousResultInput(){return this.isPreviousResultEnabled()?this.state.getPreviousResult():null}trackPreviousResult(t,e){return this.isPreviousResultEnabled()&&this.state.setPreviousResult(t,e),t}clearOperationState(t){t&&"search"!==t||(this.previousSearchState=null),t&&"filter"!==t||(this.previousFilterState=null),t&&"sort"!==t||(this.previousSortState=null)}createSearchCacheKey(t,e){return JSON.stringify([t,e??null])}createSortCacheKey(t,e){return JSON.stringify({descriptors:t,inPlace:e??!1})}createFilterCacheKey(t){return JSON.stringify(t)}handleStateMutation(t){switch(t.type){case"add":case"update":return this.queueSearchCacheMutation(t),this.queueFilterCacheMutation(t),void this.queueSortCacheMutation(t);case"remove":case"removeMany":return this.previousSearchState=null,this.previousFilterState=null,void this.queueSortCacheMutation(t);case"data":case"clearData":return this.previousSearchState=null,this.previousFilterState=null,void(this.previousSortState=null)}}queueSearchCacheMutation(t){const e=this.previousSearchState;null!==e&&(this.canPatchStoredDatasetSearch(e)?this.previousSearchState={...e,version:this.state.getMutationVersion(),pendingMutations:e.pendingMutations.concat(t)}:this.previousSearchState=null)}queueFilterCacheMutation(t){const e=this.previousFilterState;null!==e&&(this.canPatchStoredDatasetFilter(e)?this.previousFilterState={...e,version:this.state.getMutationVersion(),pendingMutations:e.pendingMutations.concat(t)}:this.previousFilterState=null)}queueSortCacheMutation(t){const e=this.previousSortState;null!==e&&(this.canPatchStoredDatasetSort(e)?this.previousSortState={...e,version:this.state.getMutationVersion(),pendingMutations:e.pendingMutations.concat(t)}:this.previousSortState=null)}resolvePendingSortCache(t){if(0===t.pendingMutations.length)return t;let e={...t,pendingMutations:[]};for(let i=0;i<t.pendingMutations.length;i++)if(e=this.applySortCacheMutation(e,t.pendingMutations[i]),null===e)return null;return e}resolvePendingSearchCache(t){if(0===t.pendingMutations.length)return t;let e={...t,pendingMutations:[]};for(let i=0;i<t.pendingMutations.length;i++)if(e=this.applySearchCacheMutation(e,t.pendingMutations[i]),null===e)return null;return e}resolvePendingFilterCache(t){if(0===t.pendingMutations.length)return t;let e={...t,pendingMutations:[]};for(let i=0;i<t.pendingMutations.length;i++)if(e=this.applyFilterCacheMutation(e,t.pendingMutations[i]),null===e)return null;return e}applySortCacheMutation(t,e){switch(e.type){case"add":return this.patchSortCacheForAddedItems(t,e.items);case"update":return this.patchSortCacheForUpdatedItem(t,e.previousItem,e.nextItem);case"remove":return this.patchSortCacheForRemovedItems(t,[e.removedItem]);case"removeMany":return this.patchSortCacheForRemovedItems(t,e.entries.map(t=>t.removedItem));case"data":case"clearData":return null}}applySearchCacheMutation(t,e){switch(e.type){case"add":return this.patchSearchCacheForAddedItems(t,e.items);case"update":return this.patchSearchCacheForUpdatedItem(t,e.previousItem,e.nextItem);case"remove":case"removeMany":case"data":case"clearData":return null}}applyFilterCacheMutation(t,e){switch(e.type){case"add":return this.patchFilterCacheForAddedItems(t,e.items);case"update":return this.patchFilterCacheForUpdatedItem(t,e.previousItem,e.nextItem);case"remove":case"removeMany":case"data":case"clearData":return null}}canPatchStoredDatasetSearch(t){return t.originData===this.state.getOriginData()&&null!==t.field}canPatchStoredDatasetFilter(t){if(t.sourceData!==this.state.getOriginData())return!1;for(let e=0;e<t.criteria.length;e++)if(!this.isPatchableFilterCriterion(t.criteria[e]))return!1;return!0}canPatchStoredDatasetSort(t){return t.sourceData===this.state.getOriginData()}compareItemsByDescriptors(t,e,i){for(let r=0;r<i.length;r++){const{field:s,direction:a}=i[r],n=t[s],o=e[s];if(n<o)return"asc"===a?-1:1;if(n>o)return"asc"===a?1:-1}return(this.state.getItemIndex(t)??-1)-(this.state.getItemIndex(e)??-1)}findSortInsertPosition(t,e,i){let r=0,s=t.length;for(;r<s;){const a=r+s>>1;this.compareItemsByDescriptors(t[a],e,i)<=0?r=a+1:s=a}return r}findDatasetInsertPosition(t,e){const i=this.state.getItemIndex(e)??Number.MAX_SAFE_INTEGER;for(let r=0;r<t.length;r++)if((this.state.getItemIndex(t[r])??Number.MAX_SAFE_INTEGER)>i)return r;return t.length}doesItemMatchSearchCache(t,e){if(null===t.field||0===t.lowerQuery.length)return!1;const i=e[t.field];return"string"==typeof i&&i.toLowerCase().includes(t.lowerQuery)}patchSearchCacheForAddedItems(t,e){if(!this.canPatchStoredDatasetSearch(t))return null;const i=t.result.slice();for(let r=0;r<e.length;r++){const s=e[r];this.doesItemMatchSearchCache(t,s)&&i.push(s)}return{...t,result:i,pendingMutations:[],version:this.state.getMutationVersion()}}patchSearchCacheForUpdatedItem(t,e,i){if(!this.canPatchStoredDatasetSearch(t))return null;const r=t.result.slice(),s=r.indexOf(e),a=this.doesItemMatchSearchCache(t,i);if(-1!==s)a?r[s]=i:r.splice(s,1);else if(a){const t=this.findDatasetInsertPosition(r,i);r.splice(t,0,i)}return{...t,result:r,pendingMutations:[],version:this.state.getMutationVersion()}}isPatchableFilterCriterion(t){return!String(t.field).includes(".")}doesItemMatchFilterCache(t,e){for(let i=0;i<t.criteria.length;i++){const r=t.criteria[i];if(!this.isPatchableFilterCriterion(r))return!1;const s=e[r.field];if(void 0!==r.values&&r.values.length>0&&!r.values.includes(s))return!1;if(void 0!==r.exclude&&r.exclude.length>0&&r.exclude.includes(s))return!1}return!0}patchFilterCacheForAddedItems(t,e){if(!this.canPatchStoredDatasetFilter(t))return null;const i=t.result.slice();for(let r=0;r<e.length;r++){const s=e[r];this.doesItemMatchFilterCache(t,s)&&i.push(s)}return{...t,result:i,pendingMutations:[],version:this.state.getMutationVersion()}}patchFilterCacheForUpdatedItem(t,e,i){if(!this.canPatchStoredDatasetFilter(t))return null;const r=t.result.slice(),s=r.indexOf(e),a=this.doesItemMatchFilterCache(t,i);if(-1!==s)a?r[s]=i:r.splice(s,1);else if(a){const t=this.findDatasetInsertPosition(r,i);r.splice(t,0,i)}return{...t,result:r,pendingMutations:[],version:this.state.getMutationVersion()}}patchSortCacheForAddedItems(t,e){if(!this.canPatchStoredDatasetSort(t))return null;const i=t.result.slice();for(let r=0;r<e.length;r++){const s=e[r],a=this.findSortInsertPosition(i,s,t.descriptors);i.splice(a,0,s)}return{...t,result:i,pendingMutations:[],version:this.state.getMutationVersion()}}patchSortCacheForUpdatedItem(t,e,i){if(!this.canPatchStoredDatasetSort(t))return null;const r=t.result.slice(),s=r.indexOf(e);if(-1===s)return-1!==t.result.indexOf(i)?{...t,pendingMutations:[],version:this.state.getMutationVersion()}:null;if(!t.descriptors.some(({field:t})=>e[t]!==i[t]))return r[s]=i,{...t,result:r,pendingMutations:[],version:this.state.getMutationVersion()};r.splice(s,1);const a=this.findSortInsertPosition(r,i,t.descriptors);return r.splice(a,0,i),{...t,result:r,pendingMutations:[],version:this.state.getMutationVersion()}}patchSortCacheForRemovedItems(t,e){if(!this.canPatchStoredDatasetSort(t))return null;const i=new Set(e);return{...t,result:Array.prototype.filter.call(t.result,t=>!i.has(t)),pendingMutations:[],version:this.state.getMutationVersion()}}search(t,e){if(!this.searchModule)throw v.unavailableEngine("search");const i=this.state.getOriginData(),r=this.state.getMutationVersion(),s=this.createSearchCacheKey(t,e),a=this.previousSearchState;if(a?.originData===i&&a.key===s&&a.version===r){const t=this.resolvePendingSearchCache(a);if(null!==t)return this.previousSearchState=t,this.withChain(this.trackPreviousResult(t.result,i));this.previousSearchState=null}const n=void 0===e?this.searchModule.executeSearch(t):this.searchModule.executeSearch(t,e);return this.previousSearchState={key:s,originData:i,result:n,version:r,field:void 0===e?null:t,lowerQuery:(e??t).trim().toLowerCase(),pendingMutations:[]},this.withChain(this.trackPreviousResult(n,i))}sort(t,e,i){if(!this.sortModule)throw v.unavailableEngine("sort");let r,s;if(void 0===e?(s=t,r=this.getPreviousResultInput()??this.state.getOriginData()):(r=t,s=e),!i){const t=this.state.getMutationVersion(),a=this.createSortCacheKey(s,i),n=this.previousSortState;if(n?.sourceData===r&&n.key===a&&n.version===t){const t=this.resolvePendingSortCache(n);if(null!==t)return this.previousSortState=t,this.withChain(this.trackPreviousResult(t.result,r));this.previousSortState=null}const o=void 0===e&&r===this.state.getOriginData()?this.sortModule.executeSort(s):this.sortModule.executeSort(r,s,i);return this.previousSortState={key:a,sourceData:r,result:o,version:t,descriptors:s,pendingMutations:[]},this.withChain(this.trackPreviousResult(o,r))}return this.withChain(this.trackPreviousResult(this.sortModule.executeSort(r,s,i),r))}filter(t,e){if(!this.filterModule)throw v.unavailableEngine("filter");if(void 0===e){const e=this.getPreviousResultInput(),i=e??this.state.getOriginData(),r=t,s=this.state.getMutationVersion(),a=this.createFilterCacheKey(r),n=this.previousFilterState;if(n?.sourceData===i&&n.key===a&&n.version===s){const t=this.resolvePendingFilterCache(n);if(null!==t)return this.previousFilterState=t,this.withChain(this.trackPreviousResult(t.result,i));this.previousFilterState=null}const o=null===e?this.filterModule.executeFilter(r):this.filterModule.executeFilter(e,r);return this.previousFilterState={key:a,sourceData:i,result:o,version:s,criteria:r,pendingMutations:[]},this.withChain(this.trackPreviousResult(o,i))}const i=t;return this.withChain(this.trackPreviousResult(this.filterModule.executeFilter(i,e),i))}withChain(t){return this.chainBuilder.create(t)}getOriginData(){if(this.searchModule||this.sortModule||this.filterModule)return this.state.getOriginData();throw v.unavailableGetOriginData()}add(t){return 0===t.length||this.state.add(t),this}update(t){return this.state.update(t),this}clearIndexes(t){const e=this.getAdapter(t);if(e)return e.clearIndexes(),this.clearOperationState(t),this;throw v.unavailableEngine(t)}data(t){return this.state.data(t),this}clearData(t){if(this.getAdapter(t))return this.state.clearData(),this;throw v.unavailableEngine(t)}};export{S as t};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { S as State } from '../State-CYIe-3He.js';
|
|
2
|
+
import { C as CollectionItem, F as FilterCriterion, U as UpdateDescriptor } from '../types-DONld7xY.js';
|
|
3
|
+
export { I as IndexableKey } from '../types-DONld7xY.js';
|
|
4
|
+
|
|
5
|
+
interface FilterEngineChain<T extends CollectionItem> {
|
|
6
|
+
filter(criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
|
|
7
|
+
filter(data: T[], criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
|
|
8
|
+
getOriginData(): T[];
|
|
9
|
+
add(items: T[]): FilterEngine<T>;
|
|
10
|
+
update(descriptor: UpdateDescriptor<T>): FilterEngine<T>;
|
|
11
|
+
data(data: T[]): FilterEngine<T>;
|
|
12
|
+
clearIndexes(): FilterEngine<T>;
|
|
13
|
+
clearData(): FilterEngine<T>;
|
|
14
|
+
resetFilterState(): FilterEngine<T>;
|
|
15
|
+
}
|
|
16
|
+
interface FilterEngineOptions<T extends CollectionItem = CollectionItem> {
|
|
17
|
+
data?: T[];
|
|
18
|
+
mutableExcludeField?: keyof T & string;
|
|
19
|
+
fields?: (keyof T & string)[];
|
|
20
|
+
nestedFields?: string[];
|
|
21
|
+
filterByPreviousResult?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* FilterEngine class for filtering collections by multiple criteria,
|
|
26
|
+
* supporting indexed lookups and linear scans for large datasets.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
declare class FilterEngine<T extends CollectionItem> {
|
|
30
|
+
private readonly indexer;
|
|
31
|
+
private readonly filterByPreviousResult;
|
|
32
|
+
private readonly mutableExcludeField;
|
|
33
|
+
private readonly state;
|
|
34
|
+
private readonly namespace;
|
|
35
|
+
private readonly nestedCollection;
|
|
36
|
+
private readonly chainBuilder;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new FilterEngine with optional data and fields to index.
|
|
39
|
+
*/
|
|
40
|
+
constructor(options?: FilterEngineOptions<T> & {
|
|
41
|
+
state?: State<T>;
|
|
42
|
+
});
|
|
43
|
+
private get dataset();
|
|
44
|
+
private get runtime();
|
|
45
|
+
private get mutableExcludeState();
|
|
46
|
+
private get indexedFields();
|
|
47
|
+
private get sequentialCache();
|
|
48
|
+
private shouldDeferMutationIndexUpdates;
|
|
49
|
+
private markDeferredMutationState;
|
|
50
|
+
private ensureRuntimeReady;
|
|
51
|
+
private rebuildConfiguredIndexes;
|
|
52
|
+
/**
|
|
53
|
+
* Builds an index for the given field.
|
|
54
|
+
*/
|
|
55
|
+
private buildIndex;
|
|
56
|
+
clearIndexes(): this;
|
|
57
|
+
resetFilterState(): this;
|
|
58
|
+
clearData(): this;
|
|
59
|
+
data(data: T[]): this;
|
|
60
|
+
add(items: T[]): this;
|
|
61
|
+
update(descriptor: UpdateDescriptor<T>): this;
|
|
62
|
+
private applyAddedItems;
|
|
63
|
+
getOriginData(): T[];
|
|
64
|
+
/**
|
|
65
|
+
* Filters the data based on the given criteria.
|
|
66
|
+
*/
|
|
67
|
+
filter(criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
|
|
68
|
+
filter(data: T[], criteria: FilterCriterion<T>[]): T[] & FilterEngineChain<T>;
|
|
69
|
+
rawFilter(criteria: FilterCriterion<T>[]): T[];
|
|
70
|
+
rawFilter(data: T[], criteria: FilterCriterion<T>[]): T[];
|
|
71
|
+
private resolveWithSequentialCache;
|
|
72
|
+
private withChain;
|
|
73
|
+
private handleStateMutation;
|
|
74
|
+
private rebuildMutableExcludeState;
|
|
75
|
+
private updateMutableExcludeStateForAddedItems;
|
|
76
|
+
private applyMutableExclude;
|
|
77
|
+
private applyUpdatedItem;
|
|
78
|
+
private applyRemovedItem;
|
|
79
|
+
private applyRemovedItems;
|
|
80
|
+
private updateMutableExcludeStateForUpdatedItem;
|
|
81
|
+
private clearMutableExcludeState;
|
|
82
|
+
private registerMutableExcludeValue;
|
|
83
|
+
private unregisterMutableExcludeValue;
|
|
84
|
+
/**
|
|
85
|
+
* Filters data linearly without index.
|
|
86
|
+
*/
|
|
87
|
+
private linearFilter;
|
|
88
|
+
/**
|
|
89
|
+
* Filters data using the index.
|
|
90
|
+
*/
|
|
91
|
+
private filterViaIndex;
|
|
92
|
+
/**
|
|
93
|
+
* Estimates the size of the index for a criterion.
|
|
94
|
+
*/
|
|
95
|
+
private estimateIndexSize;
|
|
96
|
+
private applyIndexedExclusions;
|
|
97
|
+
private createEmptyResult;
|
|
98
|
+
private storePreviousResult;
|
|
99
|
+
private createCriteriaCacheKey;
|
|
100
|
+
private createSequentialCacheEntry;
|
|
101
|
+
private createSequentialExecutionCriteria;
|
|
102
|
+
private hasCriteriaBacktrack;
|
|
103
|
+
private canApplySequentiallyToEmptyResult;
|
|
104
|
+
private createCriteriaStateMap;
|
|
105
|
+
private isCriterionBacktracked;
|
|
106
|
+
private isSubset;
|
|
107
|
+
private areSetsEqual;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { CollectionItem, FilterCriterion, FilterEngine };
|
|
111
|
+
export type { FilterEngineChain, FilterEngineOptions };
|