@agile-team/mach-table 0.31.1 → 0.31.2

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 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});
1
+ "use strict";var b=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var x=(e,r)=>{for(var t in r)b(e,t,{get:r[t],enumerable:!0})},I=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of N(r))!W.call(e,o)&&o!==t&&b(e,o,{get:()=>r[o],enumerable:!(n=R(r,o))||n.enumerable});return e};var S=e=>I(b({},"__esModule",{value:!0}),e);var V={};x(V,{createWorkerDataProcessor:()=>M,installGridDataWorker:()=>F,processFieldDataRequest:()=>P});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 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 T=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function q(e,r){let t=e==null||e==="",n=r==null||r==="";return!t&&!n?null:t&&n?0:t?1:-1}function _(e,r){let t=Number.isNaN(e),n=Number.isNaN(r);return t||n?t===n?0:t?1:-1:e-r}function A(e,r){return e===r?0:e?1:-1}function C(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 n=String(e),o=String(r);return T?T.compare(n,o):n.localeCompare(o)}function j(e){return e==null?"":String(e).toLowerCase()}function B(e,r,t){let n=j(e),o=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 r.length===0||(t==="or"?r.some(o):r.every(o))}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 n=typeof e=="number"?e:Number(e);if(Number.isNaN(n))return!1;let o=r.value;return o==null||Number.isNaN(o)?!1:H(n,o,r)}function U(e,r,t){let n=o=>Q(e,o);return r.length===0||(t==="or"?r.some(n):r.every(n))}function D(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 n=D(e),o=a=>{let s=n==null;if(a.match==="blank")return s;if(a.match==="notBlank")return!s;if(s)return!1;let c=n,u=a.value!=null?D(a.value):null;if(u==null)return!1;switch(a.match){case"equals":return c===u;case"notEquals":return c!==u;case"lessThan":return c<u;case"greaterThan":return c>u;case"inRange":{let m=a.value2!=null?D(a.value2):null;return m!=null?c>=u&&c<=m:c>=u}default:return!0}};return r.length===0||(t==="or"?r.some(o):r.every(o))}function J(e,r){return r.length===0?!0:r.some(t=>t==null&&e==null||t===e)}function h(e,r){let t=r.type!=="set"&&r.operator==="or"?"or":"and";switch(r.type){case"text":return B(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 o=t.get(e.colId);return o==null||h(f(r,o),e.filter)}let n=e.operator==="or"?e.children.some(o=>w(o,r,t)):e.children.every(o=>w(o,r,t));return e.not?!n:n}function K(e,r,t){for(let[n,o]of Object.entries(r.filterModel)){let a=t.get(n);if(a!=null&&!h(f(e,a),o))return!1}return!0}function X(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 Y(e,r,t,n){return!K(e,r,t)||r.advancedFilterModel&&!w(r.advancedFilterModel.root,e,t)?!1:X(e,r,n)}function Z(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=C(f(n.data,s),f(o.data,s));if(c!==0)return a.direction==="desc"?-c:c}return n.order-o.order})}function $(e){if(!e?.())return;let r=new Error("Data processing aborted");throw r.name="AbortError",r}async function P(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++){$(r.isCancelled),s>0&&s%o===0&&await new Promise(u=>setTimeout(u,0));let c=e.rows[s];Y(c.data,e,t,n)&&a.push({id:c.id,data:c.data,order:s})}return Z(a,e,t),{rowIds:a.map(s=>s.id)}}function F(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),P(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 k(e){if(e instanceof Error)return e;let r=new Error(typeof e=="string"?e:"Data processing aborted");return r.name="AbortError",r}function M(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 d=a.get(i.requestId);d&&(a.delete(i.requestId),d.signal.removeEventListener("abort",d.abort),i.type==="mach-table:result"?d.resolve({rowIds:i.rowIds}):d.reject(new Error(i.message)))},u=l=>{l.removeEventListener("message",c),l.removeEventListener("error",m)},m=l=>{let i=t;t=null,i&&(u(i),i.terminate()),s(l.error??new Error(l.message||"Grid data worker failed"))},G=()=>{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",m),t};return{process(l){if(l.signal.aborted)return Promise.reject(k(l.signal.reason));let i=++n;return new Promise((d,y)=>{let g=()=>{a.get(i)&&(a.delete(i),t?.postMessage({type:"mach-table:cancel",requestId:i}),y(k(l.signal.reason)))};a.set(i,{resolve:d,reject:y,signal:l.signal,abort:g}),l.signal.addEventListener("abort",g,{once:!0});let{signal:v,...E}=l;try{G().postMessage({type:"mach-table:process",requestId:i,payload:E})}catch(p){a.delete(i),l.signal.removeEventListener("abort",g),y(p instanceof Error?p:new Error(String(p)))}})},destroy(){if(!o){if(o=!0,s(k("Worker data processor destroyed")),t){let l=t;u(l),r.terminateOnDestroy!==!1&&l.terminate()}t=null}}}}0&&(module.exports={createWorkerDataProcessor,installGridDataWorker,processFieldDataRequest});
package/dist/worker.js CHANGED
@@ -1 +1 @@
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};
1
+ var G=new Set(["__proto__","prototype","constructor"]);function v(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||!v(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 w=typeof Intl<"u"?new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"}):null;function E(e,r){let t=e==null||e==="",n=r==null||r==="";return!t&&!n?null:t&&n?0:t?1:-1}function R(e,r){let t=Number.isNaN(e),n=Number.isNaN(r);return t||n?t===n?0:t?1:-1:e-r}function N(e,r){return e===r?0:e?1:-1}function P(e,r){let t=E(e,r);if(t!==null)return t;if(typeof e=="number"&&typeof r=="number")return R(e,r);if(e instanceof Date&&r instanceof Date)return e.getTime()-r.getTime();if(typeof e=="boolean"&&typeof r=="boolean")return N(e,r);let n=String(e),o=String(r);return w?w.compare(n,o):n.localeCompare(o)}function W(e){return e==null?"":String(e).toLowerCase()}function x(e,r,t){let n=W(e),o=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 r.length===0||(t==="or"?r.some(o):r.every(o))}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=o=>S(e,o);return r.length===0||(t==="or"?r.some(n):r.every(n))}function b(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=b(e),o=a=>{let s=n==null;if(a.match==="blank")return s;if(a.match==="notBlank")return!s;if(s)return!1;let c=n,u=a.value!=null?b(a.value):null;if(u==null)return!1;switch(a.match){case"equals":return c===u;case"notEquals":return c!==u;case"lessThan":return c<u;case"greaterThan":return c>u;case"inRange":{let m=a.value2!=null?b(a.value2):null;return m!=null?c>=u&&c<=m:c>=u}default:return!0}};return r.length===0||(t==="or"?r.some(o):r.every(o))}function q(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 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 k(e,r,t){if(e.kind==="condition"){let o=t.get(e.colId);return o==null||D(f(r,o),e.filter)}let n=e.operator==="or"?e.children.some(o=>k(o,r,t)):e.children.every(o=>k(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&&!D(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 j(e,r,t,n){return!_(e,r,t)||r.advancedFilterModel&&!k(r.advancedFilterModel.root,e,t)?!1:A(e,r,n)}function B(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(u=>setTimeout(u,0));let c=e.rows[s];j(c.data,e,t,n)&&a.push({id:c.id,data:c.data,order:s})}return B(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 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 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 d=a.get(i.requestId);d&&(a.delete(i.requestId),d.signal.removeEventListener("abort",d.abort),i.type==="mach-table:result"?d.resolve({rowIds:i.rowIds}):d.reject(new Error(i.message)))},u=l=>{l.removeEventListener("message",c),l.removeEventListener("error",m)},m=l=>{let i=t;t=null,i&&(u(i),i.terminate()),s(l.error??new Error(l.message||"Grid data worker failed"))},C=()=>{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",m),t};return{process(l){if(l.signal.aborted)return Promise.reject(h(l.signal.reason));let i=++n;return new Promise((d,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:d,reject:y,signal:l.signal,abort:g}),l.signal.addEventListener("abort",g,{once:!0});let{signal:F,...M}=l;try{C().postMessage({type:"mach-table:process",requestId:i,payload:M})}catch(p){a.delete(i),l.signal.removeEventListener("abort",g),y(p instanceof Error?p:new Error(String(p)))}})},destroy(){if(!o){if(o=!0,s(h("Worker data processor destroyed")),t){let l=t;u(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.31.1",
3
+ "version": "0.31.2",
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.31.1 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、区段隔离状态持久化和可诊断扩展系统。本版增加可配置整行颜色、完善主题化行拖拽与键盘排序,并修正树交互与列宽拖动反馈。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid, indexColumn } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n indexColumn({ headerName: \"序号\" }),\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单元格编辑通过内置对勾/取消控件显式结束,普通鼠标和焦点变化不会误提交;Enter、Escape、Tab 仍提供完整键盘路径。筛选、列设置、上下文菜单和操作菜单会继承所属表格实例的主题变量,不受宿主页面全局样式影响。\n\n`loading: true` 默认展示轻量表格骨架与本地化状态文案,空数据默认展示内置插画;需要品牌化时再通过 `overlayLoadingTemplate`、`overlayNoRowsTemplate` 覆盖,基础页面无需重复实现 loading/empty DOM。\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## 行拖拽与条件整行颜色\n\n```ts\nimport { dragColumn, type GridOptions } from \"@agile-team/mach-table\";\n\ninterface Plan { id: string; name: string; status: string }\nconst options: GridOptions<Plan> = {\n rowKey: \"id\",\n columnDefs: [dragColumn(), { field: \"name\" }, { field: \"status\" }],\n rowStyleRules: [\n { when: ({ data }) => data.status === \"pending\", tone: \"warning\" },\n { when: ({ data }) => data.status === \"failed\", tone: \"danger\" },\n { when: ({ data }) => data.status === \"done\", tone: \"success\" }\n ]\n};\n```\n\n状态码由应用定义,包内不识别业务状态。颜色规则取第一条命中结果,未命中时沿用默认样式;支持自定义背景/文字颜色、固定列、明暗主题、选择和虚拟行复用。拖拽提供主题手柄、落点线、位置浮层、边缘滚动、Esc 取消和 Alt + ↑/↓ 移动。扁平外部数据设置 `applyRowDrag: false`,由 `onRowDragEnd` 处理持久化;自动模式先完成移动再发出事件,使用 `targetIndex` 读取最终下标。树、分组及排序等自动模式限制见[完整配方](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/row-presentation.md)。\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.31.2 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、区段隔离状态持久化和可诊断扩展系统。本版统一用户输入校验,完善缓存与异步保存边界,并优化筛选计划和失效列排序。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid, indexColumn } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n indexColumn({ headerName: \"序号\" }),\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单元格编辑通过内置对勾/取消控件显式结束,普通鼠标和焦点变化不会误提交;Enter、Escape、Tab 仍提供完整键盘路径。筛选、列设置、上下文菜单和操作菜单会继承所属表格实例的主题变量,不受宿主页面全局样式影响。\n\n编辑、粘贴、清空和填充共用已有列校验与整行校验,批量输入按行提交并合并撤销记录,异步校验不会写回已替换的数据。随机块缓存淘汰后,未保存行仍可通过编辑 API 保存或回滚;完整替换数据与重新查询会清理旧作用域的状态。\n\n`loading: true` 默认展示轻量表格骨架与本地化状态文案,空数据默认展示内置插画;需要品牌化时再通过 `overlayLoadingTemplate`、`overlayNoRowsTemplate` 覆盖,基础页面无需重复实现 loading/empty DOM。\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## 行拖拽与条件整行颜色\n\n```ts\nimport { dragColumn, type GridOptions } from \"@agile-team/mach-table\";\n\ninterface Plan { id: string; name: string; status: string }\nconst options: GridOptions<Plan> = {\n rowKey: \"id\",\n columnDefs: [dragColumn(), { field: \"name\" }, { field: \"status\" }],\n rowStyleRules: [\n { when: ({ data }) => data.status === \"pending\", tone: \"warning\" },\n { when: ({ data }) => data.status === \"failed\", tone: \"danger\" },\n { when: ({ data }) => data.status === \"done\", tone: \"success\" }\n ]\n};\n```\n\n状态码由应用定义,包内不识别业务状态。颜色规则取第一条命中结果,未命中时沿用默认样式;支持自定义背景/文字颜色、固定列、明暗主题、选择和虚拟行复用。拖拽提供主题手柄、落点线、位置浮层、边缘滚动、Esc 取消和 Alt + ↑/↓ 移动。扁平外部数据设置 `applyRowDrag: false`,由 `onRowDragEnd` 处理持久化;自动模式先完成移动再发出事件,使用 `targetIndex` 读取最终下标。树、分组及排序等自动模式限制见[完整配方](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/row-presentation.md)。\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
  }