From d36702f34080d1623b62646ed840545a5bb6a474 Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Mon, 23 Jan 2023 14:10:57 -0600 Subject: [PATCH] 1.0.0 --- dist/uFuzzy.cjs.js | 2 +- dist/uFuzzy.esm.js | 2 +- dist/uFuzzy.iife.js | 2 +- dist/uFuzzy.iife.min.js | 2 +- package.json | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dist/uFuzzy.cjs.js b/dist/uFuzzy.cjs.js index 4fabd44..a6bbe63 100644 --- a/dist/uFuzzy.cjs.js +++ b/dist/uFuzzy.cjs.js @@ -4,7 +4,7 @@ * * uFuzzy.js (μFuzzy) * A tiny, efficient fuzzy matcher that doesn't suck -* https://github.com/leeoniya/uFuzzy (v0.9.1) +* https://github.com/leeoniya/uFuzzy (v1.0.0) */ 'use strict'; diff --git a/dist/uFuzzy.esm.js b/dist/uFuzzy.esm.js index 8e2d43a..15151f9 100644 --- a/dist/uFuzzy.esm.js +++ b/dist/uFuzzy.esm.js @@ -4,7 +4,7 @@ * * uFuzzy.js (μFuzzy) * A tiny, efficient fuzzy matcher that doesn't suck -* https://github.com/leeoniya/uFuzzy (v0.9.1) +* https://github.com/leeoniya/uFuzzy (v1.0.0) */ const cmp = new Intl.Collator('en').compare; diff --git a/dist/uFuzzy.iife.js b/dist/uFuzzy.iife.js index 512b717..d01a0cd 100644 --- a/dist/uFuzzy.iife.js +++ b/dist/uFuzzy.iife.js @@ -4,7 +4,7 @@ * * uFuzzy.js (μFuzzy) * A tiny, efficient fuzzy matcher that doesn't suck -* https://github.com/leeoniya/uFuzzy (v0.9.1) +* https://github.com/leeoniya/uFuzzy (v1.0.0) */ var uFuzzy = (function () { diff --git a/dist/uFuzzy.iife.min.js b/dist/uFuzzy.iife.min.js index 32029b3..5c07ce7 100644 --- a/dist/uFuzzy.iife.min.js +++ b/dist/uFuzzy.iife.min.js @@ -1,2 +1,2 @@ -/*! https://github.com/leeoniya/uFuzzy (v0.9.1) */ +/*! https://github.com/leeoniya/uFuzzy (v1.0.0) */ var uFuzzy=function(){"use strict";const t=new Intl.Collator("en").compare,e=1/0,n={interSplit:"[^A-Za-z0-9]+",intraSplit:"[a-z][A-Z]",intraBound:"[A-Za-z][0-9]|[0-9][A-Za-z]|[a-z][A-Z]",interLft:0,interRgt:0,interChars:".",interIns:e,intraChars:"[a-z\\d]",intraIns:0,intraMode:0,intraSlice:[1,e],intraSub:0,intraTrn:0,intraDel:0,intraFilt:()=>!0,sort:(e,n)=>{let{idx:l,chars:r,terms:i,interLft2:s,interLft1:a,start:h,intraIns:g,interIns:f}=e;return l.map(((t,e)=>e)).sort(((e,c)=>r[c]-r[e]||g[e]-g[c]||i[c]+s[c]+.5*a[c]-(i[e]+s[e]+.5*a[e])||f[e]-f[c]||h[e]-h[c]||t(n[l[e]],n[l[c]])))}},l=(t,n)=>0==n?"":1==n?t+"??":n==e?t+"*?":t+`{0,${n}}?`,r="(?:\\b|_)";function i(t){t=Object.assign({},n,t);const{interLft:e,interRgt:i,intraMode:s,intraSlice:h,intraIns:g,intraSub:f,intraTrn:c,intraDel:u,intraSplit:o,interSplit:p,intraBound:m,intraChars:b}=t;let{intraRules:S}=t;null==S&&(S=t=>{let e=n.intraSlice,l=0,r=0,i=0,s=0,a=t.length;return a>4?(e=h,l=g,r=f,i=c,s=u):3>a||(i=Math.min(c,1),4==a&&(l=Math.min(g,1))),{intraSlice:e,intraIns:l,intraSub:r,intraTrn:i,intraDel:s}});let I=!!o,R=RegExp(o,"g"),d=RegExp(p,"g"),x=RegExp("^"+p+"|"+p+"$","g");const A=t=>(t=t.replace(x,""),I&&(t=t.replace(R,(t=>t[0]+" "+t[1]))),t.split(d)),z=(n,a=0)=>{let h,f=A(n);if(1==s)h=f.map((t=>{let{intraSlice:e,intraIns:n,intraSub:r,intraTrn:i,intraDel:s}=S(t);if(n+r+i+s==0)return t;let[a,h]=e,g=t.slice(0,a),f=t.slice(h),c=t.slice(a,h);1==n&&1==g.length&&g!=c[0]&&(g+="(?!"+g+")");let u=c.length,o=[];if(r)for(let t=0;u>t;t++)o.push(g+c.slice(0,t)+b+c.slice(t+1)+f);if(i)for(let t=0;u-1>t;t++)c[t]!=c[t+1]&&o.push(g+c.slice(0,t)+c[t+1]+c[t]+c.slice(t+2)+f);if(s)for(let t=0;u>t;t++)o.push(g+c.slice(0,t+1)+"?"+c.slice(t+1)+f);if(n){let t=l(b,1);for(let e=0;u>e;e++)o.push(g+c.slice(0,e)+t+c.slice(e)+f)}return"(?:"+t+"|"+o.join("|")+")"}));else{let t=l(b,g);2==a&&g>0&&(t=")("+t+")("),h=f.map((e=>e.split("").map(((t,e,n)=>(1==g&&0==e&&n.length>1&&t[e]!=t[e+1]&&(t+="(?!"+t+")"),t))).join(t)))}let c=2==e?r:"",u=2==i?r:"",o=u+l(t.interChars,t.interIns)+c;return h=a>0?"("+h.join(")("+o+")(")+")":h.join(o),h=a>0?2==e?"("+c+")"+h+"("+u+")":"(.?)"+h+"(.?)":c+h+u,[RegExp(h,"i"),f]},E=(t,e,n)=>{let l=[],[r]=z(e);if(null!=n)for(let e=0;n.length>e;e++){let i=n[e];r.test(t[i])&&l.push(i)}else for(let e=0;t.length>e;e++)r.test(t[e])&&l.push(e);return l};let L=!!m,k=RegExp(p),y=RegExp(m);const C=(n,l,r)=>{let[s,a]=z(r,1),h=a.length,[g]=z(r,2),f=n.length,c=Array(f).fill(0),u={idx:Array(f),start:c.slice(),chars:c.slice(),terms:c.slice(),interIns:c.slice(),intraIns:c.slice(),interLft2:c.slice(),interRgt2:c.slice(),interLft1:c.slice(),interRgt1:c.slice(),ranges:Array(f)},o=1==e||1==i,p=0;for(let r=0;n.length>r;r++){let f=l[n[r]],c=f.match(s),m=c.index+c[1].length,b=m,S=!1,I=0,R=0,d=0,x=0,A=0,z=0,E=0,C=0;for(let n=0,l=2;h>n;n++,l+=2){let r=c[l].toLowerCase(),s=a[n],g=s.length,u=r.length,p=r==s;if(o||p){let t=b-1,n=b+u,l=!0,r=!0;if(-1==t||k.test(f[t]))p&&I++;else{if(2==e){S=!0;break}if(L&&y.test(f[t]+f[t+1]))p&&R++;else{if(1==e){S=!0;break}l=!1}}if(n==f.length||k.test(f[n]))p&&d++;else{if(2==i){S=!0;break}if(L&&y.test(f[n-1]+f[n]))p&&x++;else{if(1==i){S=!0;break}r=!1}}p&&(A+=g,l&&r&&z++)}if(u>g&&(C+=u-g),n>0&&(E+=c[l-1].length),!t.intraFilt(s,r,b)){S=!0;break}h-1>n&&(b+=u+c[l+1].length)}if(!S){u.idx[p]=n[r],u.interLft2[p]=I,u.interLft1[p]=R,u.interRgt2[p]=d,u.interRgt1[p]=x,u.chars[p]=A,u.terms[p]=z,u.interIns[p]=E,u.intraIns[p]=C,u.start[p]=m;let t=f.match(g),e=u.ranges[p]=[],l=t.index+t[1].length,i=l,s=l;for(let n=2;t.length>n;n++){let r=t[n].length;l+=r,n%2==0?s=l:r>0&&(e.push(i,s),i=s=l)}s>i&&e.push(i,s),p++}}if(n.length>p)for(let t in u)u[t]=u[t].slice(0,p);return u};return{search:(...e)=>((e,n,l=!1,r=1e3,i)=>{let s=null,h=null;if(l){let t=A(n);if(t.length>1){let n=t.slice().sort(((t,e)=>e.length-t.length));for(let t=0;n.length>t;t++){if(0==i?.length)return[[],null,null];i=E(e,n[t],i)}s=a(t).map((t=>t.join(" "))),h=[];let l=new Set;for(let t=0;s.length>t;t++)if(i.length>l.size){let n=i.filter((t=>!l.has(t))),r=E(e,s[t],n);for(let t=0;r.length>t;t++)l.add(r[t]);h.push(r)}else h.push([])}}null==s&&(s=[n],h=[i?.length>0?i:E(e,n)]);let g=null,f=null;if(r>=h.reduce(((t,e)=>t+e.length),0)){g={},f=[];for(let n=0;h.length>n;n++){let l=h[n];if(null==l||0==l.length)continue;let r=s[n],i=C(l,e,r),a=t.sort(i,e,r);if(n>0)for(let t=0;a.length>t;t++)a[t]+=f.length;for(let t in i)g[t]=(g[t]??[]).concat(i[t]);f=f.concat(a)}}return[[].concat(...h),g,f]})(...e),split:A,filter:E,info:C,sort:t.sort}}const s=(()=>{let t={A:"ÁÀÃÂÄĄ",a:"áàãâäą",E:"ÉÈÊËĖ",e:"éèêëę",I:"ÍÌÎÏĮ",i:"íìîïį",O:"ÓÒÔÕÖ",o:"óòôõö",U:"ÚÙÛÜŪŲ",u:"úùûüūų",C:"ÇČ",c:"çč",N:"Ñ",n:"ñ",S:"Š",s:"š"},e=new Map,n="";for(let l in t)t[l].split("").forEach((t=>{n+=t,e.set(t,l)}));let l=RegExp(`[${n}]`,"g");return t=>{let n=Array(t.length);for(let r=0;t.length>r;r++)n[r]=t[r].replace(l,(t=>e.get(t)));return n}})();function a(t){let e,n,l=(t=t.slice()).length,r=[t.slice()],i=Array(l).fill(0),s=1;for(;l>s;)s>i[s]?(e=s%2&&i[s],n=t[s],t[s]=t[e],t[e]=n,++i[s],s=1,r.push(t.slice())):(i[s]=0,++s);return r}const h=(t,e)=>e?`${t}`:t,g=(t,e)=>t+e;return i.latinize=s,i.permute=t=>a([...Array(t.length).keys()]).sort(((t,e)=>{for(let n=0;t.length>n;n++)if(t[n]!=e[n])return t[n]-e[n];return 0})).map((e=>e.map((e=>t[e])))),i.highlight=function(t,e,n=h,l="",r=g){l=r(l,n(t.substring(0,e[0]),!1))??l;for(let i=0;e.length>i;i+=2)l=r(l,n(t.substring(e[i],e[i+1]),!0))??l,e.length-3>i&&(l=r(l,n(t.substring(e[i+1],e[i+2]),!1))??l);return r(l,n(t.substring(e[e.length-1]),!1))??l},i}(); diff --git a/package.json b/package.json index 7f4e699..1b163de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@leeoniya/ufuzzy", - "version": "0.9.1", + "version": "1.0.0", "description": "A tiny, efficient fuzzy matcher that doesn't suck", "main": "./dist/uFuzzy.cjs.js", "module": "./dist/uFuzzy.esm.js", @@ -28,6 +28,7 @@ "filter", "hint", "autocomplete", + "typeahead", "sort" ], "author": "Leon Sorokin ",