@agile-team/mach-table 0.24.0 → 0.28.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.
@@ -803,8 +803,6 @@ interface ColumnState {
803
803
  /** Distinguishes responsive/definition width from an explicit user or API override. */
804
804
  widthMode?: "auto" | "manual";
805
805
  pinned?: "left" | "right" | null;
806
- sort?: SortDirection | null;
807
- sortIndex?: number | null;
808
806
  }
809
807
 
810
808
  declare class ColumnGroup<TData = any> {
@@ -929,7 +927,7 @@ interface GridStateStore {
929
927
  interface GridPersistenceOptions {
930
928
  /** Stable storage key; namespace it by application, user and table. */
931
929
  key: string;
932
- /** Restored state sections. Defaults to every section. */
930
+ /** Saved and restored state sections. Defaults to every section. */
933
931
  sections?: readonly GridStateSection[];
934
932
  store?: GridStateStore;
935
933
  debounceMs?: number;
@@ -803,8 +803,6 @@ interface ColumnState {
803
803
  /** Distinguishes responsive/definition width from an explicit user or API override. */
804
804
  widthMode?: "auto" | "manual";
805
805
  pinned?: "left" | "right" | null;
806
- sort?: SortDirection | null;
807
- sortIndex?: number | null;
808
806
  }
809
807
 
810
808
  declare class ColumnGroup<TData = any> {
@@ -929,7 +927,7 @@ interface GridStateStore {
929
927
  interface GridPersistenceOptions {
930
928
  /** Stable storage key; namespace it by application, user and table. */
931
929
  key: string;
932
- /** Restored state sections. Defaults to every section. */
930
+ /** Saved and restored state sections. Defaults to every section. */
933
931
  sections?: readonly GridStateSection[];
934
932
  store?: GridStateStore;
935
933
  debounceMs?: number;
package/dist/worker.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var D=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var C=(e,r)=>{for(var n in r)D(e,n,{get:r[n],enumerable:!0})},I=(e,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of x(r))!N.call(e,t)&&t!==n&&D(e,t,{get:()=>r[t],enumerable:!(o=R(r,t))||o.enumerable});return e};var S=e=>I(D({},"__esModule",{value:!0}),e);var K={};C(K,{createWorkerDataProcessor:()=>v,installGridDataWorker:()=>G,processFieldDataRequest:()=>k});module.exports=S(K);var O=new Set(["__proto__","prototype","constructor"]);function L(e){return typeof e!="string"||e.length===0?!1:e.split(".").every(n=>n.length>0&&!O.has(n))}function f(e,r){if(e==null||!L(r))return;if(r.indexOf(".")<0)return e[r];let o=e,t=0;for(;t<r.length;){if(o==null)return;let a=r.indexOf(".",t);if(a<0){o=o[r.slice(t)];break}o=o[r.slice(t,a)],t=a+1}return o}var T=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function M(e,r){let n=e==null||e==="",o=r==null||r==="";if(n&&o)return 0;if(n)return 1;if(o)return-1;if(typeof e=="number"&&typeof r=="number")return isNaN(e)&&isNaN(r)?0:isNaN(e)?1:isNaN(r)?-1:e-r;if(e instanceof Date&&r instanceof Date)return e.getTime()-r.getTime();if(typeof e=="boolean"&&typeof r=="boolean")return e===r?0:e?1:-1;let t=String(e),a=String(r);return T?T.compare(t,a):t.localeCompare(a)}function q(e){return e==null?"":String(e).toLowerCase()}function _(e,r,n){let o=q(e),t=r.map(a=>{let s=(a.value??"").toLowerCase();switch(a.match){case"contains":return o.includes(s);case"notContains":return!o.includes(s);case"equals":return o===s;case"notEquals":return o!==s;case"startsWith":return o.startsWith(s);case"endsWith":return o.endsWith(s);case"blank":return o==="";case"notBlank":return o!=="";default:return!0}});return t.length===0?!0:n==="or"?t.some(Boolean):t.every(Boolean)}function A(e,r,n){let o=r.map(t=>{let a=e==null||e==="";if(t.match==="blank")return a;if(t.match==="notBlank")return!a;if(a)return!1;let s=typeof e=="number"?e:Number(e);if(isNaN(s))return!1;let i=t.value;if(i==null||isNaN(i))return!1;switch(t.match){case"equals":return s===i;case"notEquals":return s!==i;case"lessThan":return s<i;case"lessThanOrEqual":return s<=i;case"greaterThan":return s>i;case"greaterThanOrEqual":return s>=i;case"inRange":return s>=i&&s<=(t.value2??i);default:return!0}});return o.length===0?!0:n==="or"?o.some(Boolean):o.every(Boolean)}function m(e){if(e==null||e==="")return null;if(e instanceof Date)return isNaN(e.getTime())?null:e.getTime();if(typeof e=="number")return e;let r=Date.parse(String(e));return isNaN(r)?null:r}function B(e,r,n){let o=r.map(t=>{let a=m(e)==null;if(t.match==="blank")return a;if(t.match==="notBlank")return!a;if(a)return!1;let s=m(e),i=t.value!=null?m(t.value):null;if(i==null)return!1;switch(t.match){case"equals":return s===i;case"notEquals":return s!==i;case"lessThan":return s<i;case"greaterThan":return s>i;case"inRange":{let d=t.value2!=null?m(t.value2):null;return d!=null?s>=i&&s<=d:s>=i}default:return!0}});return o.length===0?!0:n==="or"?o.some(Boolean):o.every(Boolean)}function j(e,r){return r.length===0?!0:r.some(n=>n==null&&e==null||n===e)}function b(e,r){let n=r.type!=="set"&&r.operator==="or"?"or":"and";switch(r.type){case"text":return _(e,r.conditions,n);case"number":return A(e,r.conditions,n);case"date":return B(e,r.conditions,n);case"set":return j(e,r.values);default:return!0}}function w(e,r,n){if(e.kind==="condition"){let t=n.get(e.colId);return t==null||b(f(r,t),e.filter)}let o=e.operator==="or"?e.children.some(t=>w(t,r,n)):e.children.every(t=>w(t,r,n));return e.not?!o:o}function H(e,r,n){for(let[o,t]of Object.entries(r.filterModel)){let a=n.get(o);if(a!=null&&!b(f(e,a),t))return!1}return!0}function Q(e,r,n){return n.every(o=>r.columns.some(t=>{let a=t.field==null?null:f(e,t.field);return String(a??"").toLowerCase().includes(o)}))}function U(e,r,n,o){return!H(e,r,n)||r.advancedFilterModel&&!w(r.advancedFilterModel.root,e,n)?!1:Q(e,r,o)}function z(e,r,n){r.sortModel.length!==0&&e.sort((o,t)=>{for(let a of r.sortModel){let s=n.get(a.colId);if(!s)continue;let i=M(f(o.data,s),f(t.data,s));if(i!==0)return a.direction==="desc"?-i:i}return o.order-t.order})}function J(e){if(!e?.())return;let r=new Error("Data processing aborted");throw r.name="AbortError",r}async function k(e,r={}){let n=new Map(e.columns.flatMap(s=>s.field?[[s.colId,s.field]]:[])),o=e.quickFilterText?.trim().toLowerCase().split(/\s+/).filter(Boolean)??[],t=Math.max(100,Math.trunc(r.yieldEvery??2e3)),a=[];for(let s=0;s<e.rows.length;s++){J(r.isCancelled),s>0&&s%t===0&&await new Promise(d=>setTimeout(d,0));let i=e.rows[s];U(i.data,e,n,o)&&a.push({id:i.id,data:i.data,order:s})}return z(a,e,n),{rowIds:a.map(s=>s.id)}}function G(e){let r=new Set;e.addEventListener("message",n=>{let o=n.data;if(o.type==="mach-table:cancel"){r.add(o.requestId);return}let{requestId:t}=o;r.delete(t),k(o.payload,{isCancelled:()=>r.has(t)}).then(a=>{r.has(t)||e.postMessage({type:"mach-table:result",requestId:t,rowIds:a.rowIds})}).catch(a=>{r.has(t)||e.postMessage({type:"mach-table:error",requestId:t,message:a instanceof Error?a.message:String(a)})}).finally(()=>r.delete(t))})}function h(e){if(e instanceof Error)return e;let r=new Error(typeof e=="string"?e:"Data processing aborted");return r.name="AbortError",r}function v(e,r={}){let n=null,o=0,t=!1,a=new Map,s=c=>{for(let l of a.values())l.signal.removeEventListener("abort",l.abort),l.reject(c);a.clear()},i=c=>{let l=c.data;if(!l||l.type!=="mach-table:result"&&l.type!=="mach-table:error")return;let u=a.get(l.requestId);u&&(a.delete(l.requestId),u.signal.removeEventListener("abort",u.abort),l.type==="mach-table:result"?u.resolve({rowIds:l.rowIds}):u.reject(new Error(l.message)))},d=c=>{c.removeEventListener("message",i),c.removeEventListener("error",P)},P=c=>{let l=n;n=null,l&&(d(l),l.terminate()),s(c.error??new Error(c.message||"Grid data worker failed"))},E=()=>{if(n)return n;if(t)throw new Error("Worker data processor has been destroyed");return n=e(),n.addEventListener("message",i),n.addEventListener("error",P),n};return{process(c){if(c.signal.aborted)return Promise.reject(h(c.signal.reason));let l=++o;return new Promise((u,y)=>{let g=()=>{a.get(l)&&(a.delete(l),n?.postMessage({type:"mach-table:cancel",requestId:l}),y(h(c.signal.reason)))};a.set(l,{resolve:u,reject:y,signal:c.signal,abort:g}),c.signal.addEventListener("abort",g,{once:!0});let{signal:W,...F}=c;try{E().postMessage({type:"mach-table:process",requestId:l,payload:F})}catch(p){a.delete(l),c.signal.removeEventListener("abort",g),y(p instanceof Error?p:new Error(String(p)))}})},destroy(){if(!t){if(t=!0,s(h("Worker data processor destroyed")),n){let c=n;d(c),r.terminateOnDestroy!==!1&&c.terminate()}n=null}}}}0&&(module.exports={createWorkerDataProcessor,installGridDataWorker,processFieldDataRequest});
1
+ "use strict";var b=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var x=(e,r)=>{for(var t in r)b(e,t,{get:r[t],enumerable:!0})},I=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of W(r))!R.call(e,n)&&n!==t&&b(e,n,{get:()=>r[n],enumerable:!(o=C(r,n))||o.enumerable});return e};var S=e=>I(b({},"__esModule",{value:!0}),e);var V={};x(V,{createWorkerDataProcessor:()=>N,installGridDataWorker:()=>M,processFieldDataRequest:()=>k});module.exports=S(V);var O=new Set(["__proto__","prototype","constructor"]);function L(e){return typeof e!="string"||e.length===0?!1:e.split(".").every(t=>t.length>0&&!O.has(t))}function f(e,r){if(e==null||!L(r))return;if(r.indexOf(".")<0)return e[r];let o=e,n=0;for(;n<r.length;){if(o==null)return;let a=r.indexOf(".",n);if(a<0){o=o[r.slice(n)];break}o=o[r.slice(n,a)],n=a+1}return o}var T=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function q(e,r){let t=e==null||e==="",o=r==null||r==="";return!t&&!o?null:t&&o?0:t?1:-1}function _(e,r){let t=Number.isNaN(e),o=Number.isNaN(r);return t||o?t===o?0:t?1:-1:e-r}function A(e,r){return e===r?0:e?1:-1}function v(e,r){let t=q(e,r);if(t!==null)return t;if(typeof e=="number"&&typeof r=="number")return _(e,r);if(e instanceof Date&&r instanceof Date)return e.getTime()-r.getTime();if(typeof e=="boolean"&&typeof r=="boolean")return A(e,r);let o=String(e),n=String(r);return T?T.compare(o,n):o.localeCompare(n)}function B(e){return e==null?"":String(e).toLowerCase()}function j(e,r,t){let o=B(e),n=r.map(a=>{let s=(a.value??"").toLowerCase();switch(a.match){case"contains":return o.includes(s);case"notContains":return!o.includes(s);case"equals":return o===s;case"notEquals":return o!==s;case"startsWith":return o.startsWith(s);case"endsWith":return o.endsWith(s);case"blank":return o==="";case"notBlank":return o!=="";default:return!0}});return n.length===0?!0:t==="or"?n.some(Boolean):n.every(Boolean)}function H(e,r,t){switch(t.match){case"equals":return e===r;case"notEquals":return e!==r;case"lessThan":return e<r;case"lessThanOrEqual":return e<=r;case"greaterThan":return e>r;case"greaterThanOrEqual":return e>=r;case"inRange":return e>=r&&e<=(t.value2??r);default:return!0}}function Q(e,r){let t=e==null||e==="";if(r.match==="blank")return t;if(r.match==="notBlank")return!t;if(t)return!1;let o=typeof e=="number"?e:Number(e);if(Number.isNaN(o))return!1;let n=r.value;return n==null||Number.isNaN(n)?!1:H(o,n,r)}function U(e,r,t){let o=r.map(n=>Q(e,n));return o.length===0?!0:t==="or"?o.some(Boolean):o.every(Boolean)}function p(e){if(e==null||e==="")return null;if(e instanceof Date)return isNaN(e.getTime())?null:e.getTime();if(typeof e=="number")return e;let r=Date.parse(String(e));return isNaN(r)?null:r}function z(e,r,t){let o=r.map(n=>{let a=p(e)==null;if(n.match==="blank")return a;if(n.match==="notBlank")return!a;if(a)return!1;let s=p(e),c=n.value!=null?p(n.value):null;if(c==null)return!1;switch(n.match){case"equals":return s===c;case"notEquals":return s!==c;case"lessThan":return s<c;case"greaterThan":return s>c;case"inRange":{let d=n.value2!=null?p(n.value2):null;return d!=null?s>=c&&s<=d:s>=c}default:return!0}});return o.length===0?!0:t==="or"?o.some(Boolean):o.every(Boolean)}function J(e,r){return r.length===0?!0:r.some(t=>t==null&&e==null||t===e)}function D(e,r){let t=r.type!=="set"&&r.operator==="or"?"or":"and";switch(r.type){case"text":return j(e,r.conditions,t);case"number":return U(e,r.conditions,t);case"date":return z(e,r.conditions,t);case"set":return J(e,r.values);default:return!0}}function w(e,r,t){if(e.kind==="condition"){let n=t.get(e.colId);return n==null||D(f(r,n),e.filter)}let o=e.operator==="or"?e.children.some(n=>w(n,r,t)):e.children.every(n=>w(n,r,t));return e.not?!o:o}function K(e,r,t){for(let[o,n]of Object.entries(r.filterModel)){let a=t.get(o);if(a!=null&&!D(f(e,a),n))return!1}return!0}function X(e,r,t){return t.every(o=>r.columns.some(n=>{let a=n.field==null?null:f(e,n.field);return String(a??"").toLowerCase().includes(o)}))}function Y(e,r,t,o){return!K(e,r,t)||r.advancedFilterModel&&!w(r.advancedFilterModel.root,e,t)?!1:X(e,r,o)}function Z(e,r,t){r.sortModel.length!==0&&e.sort((o,n)=>{for(let a of r.sortModel){let s=t.get(a.colId);if(!s)continue;let c=v(f(o.data,s),f(n.data,s));if(c!==0)return a.direction==="desc"?-c:c}return o.order-n.order})}function $(e){if(!e?.())return;let r=new Error("Data processing aborted");throw r.name="AbortError",r}async function k(e,r={}){let t=new Map(e.columns.flatMap(s=>s.field?[[s.colId,s.field]]:[])),o=e.quickFilterText?.trim().toLowerCase().split(/\s+/).filter(Boolean)??[],n=Math.max(100,Math.trunc(r.yieldEvery??2e3)),a=[];for(let s=0;s<e.rows.length;s++){$(r.isCancelled),s>0&&s%n===0&&await new Promise(d=>setTimeout(d,0));let c=e.rows[s];Y(c.data,e,t,o)&&a.push({id:c.id,data:c.data,order:s})}return Z(a,e,t),{rowIds:a.map(s=>s.id)}}function M(e){let r=new Set;e.addEventListener("message",t=>{let o=t.data;if(o.type==="mach-table:cancel"){r.add(o.requestId);return}let{requestId:n}=o;r.delete(n),k(o.payload,{isCancelled:()=>r.has(n)}).then(a=>{r.has(n)||e.postMessage({type:"mach-table:result",requestId:n,rowIds:a.rowIds})}).catch(a=>{r.has(n)||e.postMessage({type:"mach-table:error",requestId:n,message:a instanceof Error?a.message:String(a)})}).finally(()=>r.delete(n))})}function h(e){if(e instanceof Error)return e;let r=new Error(typeof e=="string"?e:"Data processing aborted");return r.name="AbortError",r}function N(e,r={}){let t=null,o=0,n=!1,a=new Map,s=l=>{for(let i of a.values())i.signal.removeEventListener("abort",i.abort),i.reject(l);a.clear()},c=l=>{let i=l.data;if(!i||i.type!=="mach-table:result"&&i.type!=="mach-table:error")return;let u=a.get(i.requestId);u&&(a.delete(i.requestId),u.signal.removeEventListener("abort",u.abort),i.type==="mach-table:result"?u.resolve({rowIds:i.rowIds}):u.reject(new Error(i.message)))},d=l=>{l.removeEventListener("message",c),l.removeEventListener("error",P)},P=l=>{let i=t;t=null,i&&(d(i),i.terminate()),s(l.error??new Error(l.message||"Grid data worker failed"))},G=()=>{if(t)return t;if(n)throw new Error("Worker data processor has been destroyed");return t=e(),t.addEventListener("message",c),t.addEventListener("error",P),t};return{process(l){if(l.signal.aborted)return Promise.reject(h(l.signal.reason));let i=++o;return new Promise((u,y)=>{let g=()=>{a.get(i)&&(a.delete(i),t?.postMessage({type:"mach-table:cancel",requestId:i}),y(h(l.signal.reason)))};a.set(i,{resolve:u,reject:y,signal:l.signal,abort:g}),l.signal.addEventListener("abort",g,{once:!0});let{signal:E,...F}=l;try{G().postMessage({type:"mach-table:process",requestId:i,payload:F})}catch(m){a.delete(i),l.signal.removeEventListener("abort",g),y(m instanceof Error?m:new Error(String(m)))}})},destroy(){if(!n){if(n=!0,s(h("Worker data processor destroyed")),t){let l=t;d(l),r.terminateOnDestroy!==!1&&l.terminate()}t=null}}}}0&&(module.exports={createWorkerDataProcessor,installGridDataWorker,processFieldDataRequest});
package/dist/worker.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-CnUx414l.cjs';
2
- export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-CnUx414l.cjs';
1
+ import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-CL6BYXVZ.cjs';
2
+ export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-CL6BYXVZ.cjs';
3
3
 
4
4
  type GridDataProcessorPayload<TData = any> = Omit<GridDataProcessorRequest<TData>, "signal">;
5
5
  interface GridWorkerProcessMessage<TData = any> {
package/dist/worker.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-CnUx414l.js';
2
- export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-CnUx414l.js';
1
+ import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-CL6BYXVZ.js';
2
+ export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-CL6BYXVZ.js';
3
3
 
4
4
  type GridDataProcessorPayload<TData = any> = Omit<GridDataProcessorRequest<TData>, "signal">;
5
5
  interface GridWorkerProcessMessage<TData = any> {
package/dist/worker.js CHANGED
@@ -1 +1 @@
1
- var E=new Set(["__proto__","prototype","constructor"]);function W(e){return typeof e!="string"||e.length===0?!1:e.split(".").every(n=>n.length>0&&!E.has(n))}function f(e,r){if(e==null||!W(r))return;if(r.indexOf(".")<0)return e[r];let o=e,t=0;for(;t<r.length;){if(o==null)return;let a=r.indexOf(".",t);if(a<0){o=o[r.slice(t)];break}o=o[r.slice(t,a)],t=a+1}return o}var k=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function P(e,r){let n=e==null||e==="",o=r==null||r==="";if(n&&o)return 0;if(n)return 1;if(o)return-1;if(typeof e=="number"&&typeof r=="number")return isNaN(e)&&isNaN(r)?0:isNaN(e)?1:isNaN(r)?-1:e-r;if(e instanceof Date&&r instanceof Date)return e.getTime()-r.getTime();if(typeof e=="boolean"&&typeof r=="boolean")return e===r?0:e?1:-1;let t=String(e),a=String(r);return k?k.compare(t,a):t.localeCompare(a)}function F(e){return e==null?"":String(e).toLowerCase()}function R(e,r,n){let o=F(e),t=r.map(a=>{let s=(a.value??"").toLowerCase();switch(a.match){case"contains":return o.includes(s);case"notContains":return!o.includes(s);case"equals":return o===s;case"notEquals":return o!==s;case"startsWith":return o.startsWith(s);case"endsWith":return o.endsWith(s);case"blank":return o==="";case"notBlank":return o!=="";default:return!0}});return t.length===0?!0:n==="or"?t.some(Boolean):t.every(Boolean)}function x(e,r,n){let o=r.map(t=>{let a=e==null||e==="";if(t.match==="blank")return a;if(t.match==="notBlank")return!a;if(a)return!1;let s=typeof e=="number"?e:Number(e);if(isNaN(s))return!1;let i=t.value;if(i==null||isNaN(i))return!1;switch(t.match){case"equals":return s===i;case"notEquals":return s!==i;case"lessThan":return s<i;case"lessThanOrEqual":return s<=i;case"greaterThan":return s>i;case"greaterThanOrEqual":return s>=i;case"inRange":return s>=i&&s<=(t.value2??i);default:return!0}});return o.length===0?!0:n==="or"?o.some(Boolean):o.every(Boolean)}function m(e){if(e==null||e==="")return null;if(e instanceof Date)return isNaN(e.getTime())?null:e.getTime();if(typeof e=="number")return e;let r=Date.parse(String(e));return isNaN(r)?null:r}function N(e,r,n){let o=r.map(t=>{let a=m(e)==null;if(t.match==="blank")return a;if(t.match==="notBlank")return!a;if(a)return!1;let s=m(e),i=t.value!=null?m(t.value):null;if(i==null)return!1;switch(t.match){case"equals":return s===i;case"notEquals":return s!==i;case"lessThan":return s<i;case"greaterThan":return s>i;case"inRange":{let d=t.value2!=null?m(t.value2):null;return d!=null?s>=i&&s<=d:s>=i}default:return!0}});return o.length===0?!0:n==="or"?o.some(Boolean):o.every(Boolean)}function C(e,r){return r.length===0?!0:r.some(n=>n==null&&e==null||n===e)}function D(e,r){let n=r.type!=="set"&&r.operator==="or"?"or":"and";switch(r.type){case"text":return R(e,r.conditions,n);case"number":return x(e,r.conditions,n);case"date":return N(e,r.conditions,n);case"set":return C(e,r.values);default:return!0}}function h(e,r,n){if(e.kind==="condition"){let t=n.get(e.colId);return t==null||D(f(r,t),e.filter)}let o=e.operator==="or"?e.children.some(t=>h(t,r,n)):e.children.every(t=>h(t,r,n));return e.not?!o:o}function I(e,r,n){for(let[o,t]of Object.entries(r.filterModel)){let a=n.get(o);if(a!=null&&!D(f(e,a),t))return!1}return!0}function S(e,r,n){return n.every(o=>r.columns.some(t=>{let a=t.field==null?null:f(e,t.field);return String(a??"").toLowerCase().includes(o)}))}function O(e,r,n,o){return!I(e,r,n)||r.advancedFilterModel&&!h(r.advancedFilterModel.root,e,n)?!1:S(e,r,o)}function L(e,r,n){r.sortModel.length!==0&&e.sort((o,t)=>{for(let a of r.sortModel){let s=n.get(a.colId);if(!s)continue;let i=P(f(o.data,s),f(t.data,s));if(i!==0)return a.direction==="desc"?-i:i}return o.order-t.order})}function q(e){if(!e?.())return;let r=new Error("Data processing aborted");throw r.name="AbortError",r}async function T(e,r={}){let n=new Map(e.columns.flatMap(s=>s.field?[[s.colId,s.field]]:[])),o=e.quickFilterText?.trim().toLowerCase().split(/\s+/).filter(Boolean)??[],t=Math.max(100,Math.trunc(r.yieldEvery??2e3)),a=[];for(let s=0;s<e.rows.length;s++){q(r.isCancelled),s>0&&s%t===0&&await new Promise(d=>setTimeout(d,0));let i=e.rows[s];O(i.data,e,n,o)&&a.push({id:i.id,data:i.data,order:s})}return L(a,e,n),{rowIds:a.map(s=>s.id)}}function _(e){let r=new Set;e.addEventListener("message",n=>{let o=n.data;if(o.type==="mach-table:cancel"){r.add(o.requestId);return}let{requestId:t}=o;r.delete(t),T(o.payload,{isCancelled:()=>r.has(t)}).then(a=>{r.has(t)||e.postMessage({type:"mach-table:result",requestId:t,rowIds:a.rowIds})}).catch(a=>{r.has(t)||e.postMessage({type:"mach-table:error",requestId:t,message:a instanceof Error?a.message:String(a)})}).finally(()=>r.delete(t))})}function b(e){if(e instanceof Error)return e;let r=new Error(typeof e=="string"?e:"Data processing aborted");return r.name="AbortError",r}function A(e,r={}){let n=null,o=0,t=!1,a=new Map,s=c=>{for(let l of a.values())l.signal.removeEventListener("abort",l.abort),l.reject(c);a.clear()},i=c=>{let l=c.data;if(!l||l.type!=="mach-table:result"&&l.type!=="mach-table:error")return;let u=a.get(l.requestId);u&&(a.delete(l.requestId),u.signal.removeEventListener("abort",u.abort),l.type==="mach-table:result"?u.resolve({rowIds:l.rowIds}):u.reject(new Error(l.message)))},d=c=>{c.removeEventListener("message",i),c.removeEventListener("error",w)},w=c=>{let l=n;n=null,l&&(d(l),l.terminate()),s(c.error??new Error(c.message||"Grid data worker failed"))},M=()=>{if(n)return n;if(t)throw new Error("Worker data processor has been destroyed");return n=e(),n.addEventListener("message",i),n.addEventListener("error",w),n};return{process(c){if(c.signal.aborted)return Promise.reject(b(c.signal.reason));let l=++o;return new Promise((u,y)=>{let g=()=>{a.get(l)&&(a.delete(l),n?.postMessage({type:"mach-table:cancel",requestId:l}),y(b(c.signal.reason)))};a.set(l,{resolve:u,reject:y,signal:c.signal,abort:g}),c.signal.addEventListener("abort",g,{once:!0});let{signal:G,...v}=c;try{M().postMessage({type:"mach-table:process",requestId:l,payload:v})}catch(p){a.delete(l),c.signal.removeEventListener("abort",g),y(p instanceof Error?p:new Error(String(p)))}})},destroy(){if(!t){if(t=!0,s(b("Worker data processor destroyed")),n){let c=n;d(c),r.terminateOnDestroy!==!1&&c.terminate()}n=null}}}}export{A as createWorkerDataProcessor,_ as installGridDataWorker,T as processFieldDataRequest};
1
+ var G=new Set(["__proto__","prototype","constructor"]);function E(e){return typeof e!="string"||e.length===0?!1:e.split(".").every(t=>t.length>0&&!G.has(t))}function f(e,r){if(e==null||!E(r))return;if(r.indexOf(".")<0)return e[r];let n=e,o=0;for(;o<r.length;){if(n==null)return;let a=r.indexOf(".",o);if(a<0){n=n[r.slice(o)];break}n=n[r.slice(o,a)],o=a+1}return n}var k=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function F(e,r){let t=e==null||e==="",n=r==null||r==="";return!t&&!n?null:t&&n?0:t?1:-1}function C(e,r){let t=Number.isNaN(e),n=Number.isNaN(r);return t||n?t===n?0:t?1:-1:e-r}function W(e,r){return e===r?0:e?1:-1}function P(e,r){let t=F(e,r);if(t!==null)return t;if(typeof e=="number"&&typeof r=="number")return C(e,r);if(e instanceof Date&&r instanceof Date)return e.getTime()-r.getTime();if(typeof e=="boolean"&&typeof r=="boolean")return W(e,r);let n=String(e),o=String(r);return k?k.compare(n,o):n.localeCompare(o)}function R(e){return e==null?"":String(e).toLowerCase()}function x(e,r,t){let n=R(e),o=r.map(a=>{let s=(a.value??"").toLowerCase();switch(a.match){case"contains":return n.includes(s);case"notContains":return!n.includes(s);case"equals":return n===s;case"notEquals":return n!==s;case"startsWith":return n.startsWith(s);case"endsWith":return n.endsWith(s);case"blank":return n==="";case"notBlank":return n!=="";default:return!0}});return o.length===0?!0:t==="or"?o.some(Boolean):o.every(Boolean)}function I(e,r,t){switch(t.match){case"equals":return e===r;case"notEquals":return e!==r;case"lessThan":return e<r;case"lessThanOrEqual":return e<=r;case"greaterThan":return e>r;case"greaterThanOrEqual":return e>=r;case"inRange":return e>=r&&e<=(t.value2??r);default:return!0}}function S(e,r){let t=e==null||e==="";if(r.match==="blank")return t;if(r.match==="notBlank")return!t;if(t)return!1;let n=typeof e=="number"?e:Number(e);if(Number.isNaN(n))return!1;let o=r.value;return o==null||Number.isNaN(o)?!1:I(n,o,r)}function O(e,r,t){let n=r.map(o=>S(e,o));return n.length===0?!0:t==="or"?n.some(Boolean):n.every(Boolean)}function p(e){if(e==null||e==="")return null;if(e instanceof Date)return isNaN(e.getTime())?null:e.getTime();if(typeof e=="number")return e;let r=Date.parse(String(e));return isNaN(r)?null:r}function L(e,r,t){let n=r.map(o=>{let a=p(e)==null;if(o.match==="blank")return a;if(o.match==="notBlank")return!a;if(a)return!1;let s=p(e),c=o.value!=null?p(o.value):null;if(c==null)return!1;switch(o.match){case"equals":return s===c;case"notEquals":return s!==c;case"lessThan":return s<c;case"greaterThan":return s>c;case"inRange":{let d=o.value2!=null?p(o.value2):null;return d!=null?s>=c&&s<=d:s>=c}default:return!0}});return n.length===0?!0:t==="or"?n.some(Boolean):n.every(Boolean)}function q(e,r){return r.length===0?!0:r.some(t=>t==null&&e==null||t===e)}function b(e,r){let t=r.type!=="set"&&r.operator==="or"?"or":"and";switch(r.type){case"text":return x(e,r.conditions,t);case"number":return O(e,r.conditions,t);case"date":return L(e,r.conditions,t);case"set":return q(e,r.values);default:return!0}}function h(e,r,t){if(e.kind==="condition"){let o=t.get(e.colId);return o==null||b(f(r,o),e.filter)}let n=e.operator==="or"?e.children.some(o=>h(o,r,t)):e.children.every(o=>h(o,r,t));return e.not?!n:n}function _(e,r,t){for(let[n,o]of Object.entries(r.filterModel)){let a=t.get(n);if(a!=null&&!b(f(e,a),o))return!1}return!0}function A(e,r,t){return t.every(n=>r.columns.some(o=>{let a=o.field==null?null:f(e,o.field);return String(a??"").toLowerCase().includes(n)}))}function B(e,r,t,n){return!_(e,r,t)||r.advancedFilterModel&&!h(r.advancedFilterModel.root,e,t)?!1:A(e,r,n)}function j(e,r,t){r.sortModel.length!==0&&e.sort((n,o)=>{for(let a of r.sortModel){let s=t.get(a.colId);if(!s)continue;let c=P(f(n.data,s),f(o.data,s));if(c!==0)return a.direction==="desc"?-c:c}return n.order-o.order})}function H(e){if(!e?.())return;let r=new Error("Data processing aborted");throw r.name="AbortError",r}async function T(e,r={}){let t=new Map(e.columns.flatMap(s=>s.field?[[s.colId,s.field]]:[])),n=e.quickFilterText?.trim().toLowerCase().split(/\s+/).filter(Boolean)??[],o=Math.max(100,Math.trunc(r.yieldEvery??2e3)),a=[];for(let s=0;s<e.rows.length;s++){H(r.isCancelled),s>0&&s%o===0&&await new Promise(d=>setTimeout(d,0));let c=e.rows[s];B(c.data,e,t,n)&&a.push({id:c.id,data:c.data,order:s})}return j(a,e,t),{rowIds:a.map(s=>s.id)}}function Q(e){let r=new Set;e.addEventListener("message",t=>{let n=t.data;if(n.type==="mach-table:cancel"){r.add(n.requestId);return}let{requestId:o}=n;r.delete(o),T(n.payload,{isCancelled:()=>r.has(o)}).then(a=>{r.has(o)||e.postMessage({type:"mach-table:result",requestId:o,rowIds:a.rowIds})}).catch(a=>{r.has(o)||e.postMessage({type:"mach-table:error",requestId:o,message:a instanceof Error?a.message:String(a)})}).finally(()=>r.delete(o))})}function D(e){if(e instanceof Error)return e;let r=new Error(typeof e=="string"?e:"Data processing aborted");return r.name="AbortError",r}function U(e,r={}){let t=null,n=0,o=!1,a=new Map,s=l=>{for(let i of a.values())i.signal.removeEventListener("abort",i.abort),i.reject(l);a.clear()},c=l=>{let i=l.data;if(!i||i.type!=="mach-table:result"&&i.type!=="mach-table:error")return;let u=a.get(i.requestId);u&&(a.delete(i.requestId),u.signal.removeEventListener("abort",u.abort),i.type==="mach-table:result"?u.resolve({rowIds:i.rowIds}):u.reject(new Error(i.message)))},d=l=>{l.removeEventListener("message",c),l.removeEventListener("error",w)},w=l=>{let i=t;t=null,i&&(d(i),i.terminate()),s(l.error??new Error(l.message||"Grid data worker failed"))},v=()=>{if(t)return t;if(o)throw new Error("Worker data processor has been destroyed");return t=e(),t.addEventListener("message",c),t.addEventListener("error",w),t};return{process(l){if(l.signal.aborted)return Promise.reject(D(l.signal.reason));let i=++n;return new Promise((u,y)=>{let g=()=>{a.get(i)&&(a.delete(i),t?.postMessage({type:"mach-table:cancel",requestId:i}),y(D(l.signal.reason)))};a.set(i,{resolve:u,reject:y,signal:l.signal,abort:g}),l.signal.addEventListener("abort",g,{once:!0});let{signal:M,...N}=l;try{v().postMessage({type:"mach-table:process",requestId:i,payload:N})}catch(m){a.delete(i),l.signal.removeEventListener("abort",g),y(m instanceof Error?m:new Error(String(m)))}})},destroy(){if(!o){if(o=!0,s(D("Worker data processor destroyed")),t){let l=t;d(l),r.terminateOnDestroy!==!1&&l.terminate()}t=null}}}}export{U as createWorkerDataProcessor,Q as installGridDataWorker,T as processFieldDataRequest};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-table",
3
- "version": "0.24.0",
3
+ "version": "0.28.0",
4
4
  "description": "Enterprise-grade, framework-agnostic TypeScript data grid with virtualization, editing, grouping and extensibility",
5
5
  "keywords": [
6
6
  "data-grid",
@@ -81,5 +81,5 @@
81
81
  "test": "vitest run",
82
82
  "test:coverage": "vitest run --coverage"
83
83
  },
84
- "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table\n\nMachTable 0.24 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、状态持久化和可诊断扩展系统。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n { field: \"id\", headerName: \"ID\", width: 120 },\n { field: \"name\", headerName: \"名称\", flex: 1, editable: true }\n ],\n rowData: [{ id: \"1\", name: \"MachTable\" }],\n rowKey: \"id\",\n enableColumnResize: true,\n persistence: { key: \"tenant:user:customers\", sections: [\"columns\"] }\n});\n\napi.batch((grid) => {\n grid.rows.transact({ update: [{ id: \"1\", name: \"Updated\" }] });\n grid.columns.setVisible(\"internalNote\", false);\n grid.view.refreshCells({ rowIds: [\"1\"] });\n});\n\nconst saved = await api.editing.save(orderApi.saveChanges);\nconsole.table(saved.conflicts);\nconsole.info(api.diagnostics.get());\n\n// 原生宿主卸载时必须销毁;Vue/React 适配器会自动处理。\napi.destroy();\n```\n\n公共命令按 `rows`、`columns`、`selection`、`editing`、`filtering`、`sorting`、`pagination`、`hierarchy`、`view`、`state`、`io`、`diagnostics` 划分。完整签名见 [GridApi](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/api/grid-api.md)。\n\n大型本地数据 Worker 使用独立入口:\n\n```ts\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table/worker\";\n```\n\nVue/React 项目请只安装对应适配包,它会自动安装并重导出 Core:\n\n- [@agile-team/mach-table-vue](https://www.npmjs.com/package/@agile-team/mach-table-vue)\n- [@agile-team/mach-table-react](https://www.npmjs.com/package/@agile-team/mach-table-react)\n\n文档:[快速开始](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/getting-started.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [API](https://github.com/ChenyCHENYU/MachTable/tree/main/docs/api)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
84
+ "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table\n\nMachTable 0.28 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、区段隔离状态持久化和可诊断扩展系统。0.28 保持公共 API 不变并清零历史复杂度豁免。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n { field: \"id\", headerName: \"ID\", width: 120 },\n { field: \"name\", headerName: \"名称\", flex: 1, editable: true }\n ],\n rowData: [{ id: \"1\", name: \"MachTable\" }],\n rowKey: \"id\",\n enableColumnResize: true,\n persistence: { key: \"tenant:user:customers\", sections: [\"columns\"] }\n});\n\napi.batch((grid) => {\n grid.rows.transact({ update: [{ id: \"1\", name: \"Updated\" }] });\n grid.columns.setVisible(\"internalNote\", false);\n grid.view.refreshCells({ rowIds: [\"1\"] });\n});\n\nconst saved = await api.editing.save(orderApi.saveChanges);\nconsole.table(saved.conflicts);\nconsole.info(api.diagnostics.get());\n\n// 原生宿主卸载时必须销毁;Vue/React 适配器会自动处理。\napi.destroy();\n```\n\n`persistence.sections` 同时约束进入 store 的数据与恢复范围;异步 store 写入有序,晚到加载不会覆盖加载期间的用户操作。\n\n公共命令按 `rows`、`columns`、`selection`、`editing`、`filtering`、`sorting`、`pagination`、`hierarchy`、`view`、`state`、`io`、`diagnostics` 划分。完整签名见 [GridApi](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/api/grid-api.md)。\n\n大型本地数据 Worker 使用独立入口:\n\n```ts\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table/worker\";\n```\n\nVue/React 项目请只安装对应适配包,它会自动安装并重导出 Core:\n\n- [@agile-team/mach-table-vue](https://www.npmjs.com/package/@agile-team/mach-table-vue)\n- [@agile-team/mach-table-react](https://www.npmjs.com/package/@agile-team/mach-table-react)\n\n文档:[快速开始](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/getting-started.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [API](https://github.com/ChenyCHENYU/MachTable/tree/main/docs/api)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
85
85
  }