@agile-team/mach-table 0.25.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.
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.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.25.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.25 的框架无关 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`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"
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
  }