ranges-set
Version:
Set operations on human-friendly ranges.
3 lines (2 loc) • 2.88 kB
JavaScript
const n=/^(?:0|[1-9]\d*)$/,t=/^(0|[1-9]\d*)\s*-\s*(0|[1-9]\d*)$/;function r(n,t){return n.t!==t.t?t.t-n.t:n.t?n.u>=t.u?n.u>t.u?1:0:-1:n.o-t.o||n.i-t.i}function u(n){return{t:1,u:n}}function o(n,t){return{t:0,o:n,i:t}}function e(n,t){return x(f(_(n),_(t)))}function f(n,t){const r=[];n:for(let u=0;u<n.length;++u){const e=n[u];if(e.t)for(let n=0;n<t.length;++n){const r=t[n];if(r.t&&r.u===e.u)continue n}else for(let r=0;r<t.length;++r){const f=t[r];if(!f.t){if(e.o>=f.o&&e.i<=f.i)continue n;if(e.o<=f.o&&e.i>=f.i){e.i>f.i&&n.splice(u+1,0,o(f.i+1,e.i)),e.o<f.o&&n.splice(u+1,0,o(e.o,f.o-1));continue n}e.o>=f.o&&e.o<=f.i?e.o=f.i+1:e.i>=f.o&&e.i<=f.i&&(e.i=f.o-1)}}r.push(e)}return r}function i(n,t){return c(_(n),_(t))}function c(n,t){if(n.length!==t.length)return!1;for(let u=0;u<n.length;++u)if(r(n[u],t[u]))return!1;return!0}function s(n){return l(_(n))}function l(n){const t=[];for(let r=0;r<n.length;++r){const u=n[r];if(u.t)t.push(u.u);else for(let n=u.o;n<=u.i;++n)t.push(`${n}`)}return t}function a(n,t){return x(h(_(n),_(t)))}function $(n,t){if(n.t!==t.t)return null;if(n.t)return n.u===t.u?n:null;const r=Math.max(n.o,t.o),u=Math.min(n.i,t.i);return r>u?null:o(r,u)}function h(n,t){const r=[];for(let u=0;u<n.length;++u){const o=n[u];for(let n=0;n<t.length;++n){const u=$(o,t[n]);null!==u&&r.push(u)}}return r}function M(n){return x(_(n))}function _(n){const t=[],r=n.split(",");for(let n=0;n<r.length;++n){const u=r[n].trim();u&&j(t,d(u))}return t}function d(r){if(n.test(r)){const n=+r;return o(n,n)}const e=t.exec(r);if(e){const n=+e[1],t=+e[2];return o(Math.min(n,t),Math.max(n,t))}return u(r)}function x(n){return n.map(m).join()}function m(n){return n.t?n.u:n.o===n.i?`${n.o}`:`${n.o}-${n.i}`}function L(n,t){return p(_(n),_(t))}function p(n,t){n:for(let r=0;r<t.length;++r){const u=t[r];if(u.t)for(let t=0;t<n.length;++t){const r=n[t];if(r.t&&r.u===u.u)continue n}else for(let t=0;t<n.length;++t){const r=n[t];if(!r.t&&r.o<=u.o&&r.i>=u.i)continue n}return!1}return!0}function b(n,t){return x(_(`${n},${t}`))}function g(n,t){if(n.t!==t.t)return!1;if(n.t)return n.u===t.u;const r=n.o<=t.i+1&&n.i>=t.o||t.o<=n.i+1&&t.i>=n.o;return r&&(n.o=Math.min(n.o,t.o),n.i=Math.max(n.i,t.i)),r}function j(n,t){let u=0,o=n.length;for(;u<o;){const e=u+o>>>1,f=r(t,n[e]);if(!f)return;f<0?o=e:u=e+1}k(n,t,u)||k(n,t,u+1)||n.splice(u,0,t)}function k(n,t,r){if(r&&r<=n.length&&g(n[r-1],t)){for(;r<n.length&&g(n[r-1],n[r]);)n.splice(r,1);return!0}return!1}export{r as _compare,u as _createLiteral,o as _createRange,f as _differenceReprs,c as _equalReprs,l as _expandReprs,$ as _intersectionRepr,h as _intersectionReprs,_ as _parse,d as _parseOne,x as _serialize,m as _serializeOne,p as _subsetReprs,g as _unionRepr,j as _unionReprs,k as _unionReprsAt,e as difference,i as equal,s as expand,a as intersection,M as normalize,L as subset,b as union};
//# sourceMappingURL=index.modern.js.map