@ycookiey/yfuzzy 0.2.0 → 0.3.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/README.md +12 -0
- package/dist/yfuzzy.min.js +2 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -53,6 +53,18 @@ npm install @ycookiey/yfuzzy
|
|
|
53
53
|
|
|
54
54
|
Node 18+ / ESM 専用。
|
|
55
55
|
|
|
56
|
+
### ブラウザ (CDN)
|
|
57
|
+
|
|
58
|
+
ビルドツールなしで使う場合は同梱の単一ファイル bundle を `<script>` で読み込む(グローバル `yfuzzy` が定義される):
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<script src="https://unpkg.com/@ycookiey/yfuzzy@0.3.0/dist/yfuzzy.min.js"></script>
|
|
62
|
+
<script>
|
|
63
|
+
yfuzzy.search('sinjuku', ['トウキョウ', 'シンジュク', 'シブヤ']);
|
|
64
|
+
// → [{ item: 'シンジュク', refIndex: 1, score: 1, tier: 1 }]
|
|
65
|
+
</script>
|
|
66
|
+
```
|
|
67
|
+
|
|
56
68
|
## 使い方
|
|
57
69
|
|
|
58
70
|
### 文字列配列
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! @ycookiey/yfuzzy v0.3.0 | MIT | includes wanakana (MIT) | https://github.com/ycookiey/yfuzzy */
|
|
2
|
+
"use strict";var yfuzzy=(()=>{var L=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Nt=Object.prototype.hasOwnProperty;var kt=(t,n)=>{for(var e in n)L(t,e,{get:n[e],enumerable:!0})},Tt=(t,n,e,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Et(n))!Nt.call(t,r)&&r!==e&&L(t,r,{get:()=>n[r],enumerable:!(o=dt(n,r))||o.enumerable});return t};var gt=t=>Tt(L({},"__esModule",{value:!0}),t);var mn={};kt(mn,{createIndex:()=>St,search:()=>An});var yt="\u3002\u300C\u300D\u3001\u30FB\u30F2\u30A1\u30A3\u30A5\u30A7\u30A9\u30E3\u30E5\u30E7\u30C3\u30FC\u30A2\u30A4\u30A6\u30A8\u30AA\u30AB\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D2\u30D5\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1\u30E2\u30E4\u30E6\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EF\u30F3";function bt(t){let n=[],e=0;for(let o of t)n.push({cp:o,start:e,end:e+o.length}),e+=o.length;return n}function B(t,n,e){let o=n==="all"||n==="preKana",r=n==="all"||n==="postKana",i=bt(t),a="",s=[];for(let l=0;l<i.length;l++){let f=i[l],u=f.cp.codePointAt(0),c,p=f.end;if(o&&u===12288)c=" ";else if(o&&u>=65281&&u<=65374){let h=String.fromCharCode(u-65248);c=h>="A"&&h<="Z"?h.toLowerCase():h}else if(o&&u>=65&&u<=90)c=f.cp.toLowerCase();else if(r&&u>=65377&&u<=65437){let h=yt[u-65377],A=l+1<i.length?i[l+1]:null,S=A?A.cp.codePointAt(0):-1;if(S===65438||S===65439){let E=(h+(S===65438?"\u3099":"\u309A")).normalize("NFC");[...E].length===1?(c=E,p=A.end,l++):c=h}else c=h}else r&&u===65438?c="\u309B":r&&u===65439?c="\u309C":r&&u>=12353&&u<=12438?c=String.fromCodePoint(u+96):c=f.cp;if(e){let h=[f.start,p];for(let A=0;A<c.length;A++)s.push(h)}a+=c}return{text:a,map:s}}function G(t){let{text:n,map:e}=B(t,"all",!0);return{text:n,map:e}}function M(t,n){return B(t,n,!1).text}var F={\u30A2:"a",\u30A4:"i",\u30A6:"u",\u30A8:"e",\u30AA:"o",\u30AB:"ka",\u30AD:"ki",\u30AF:"ku",\u30B1:"ke",\u30B3:"ko",\u30AC:"ga",\u30AE:"gi",\u30B0:"gu",\u30B2:"ge",\u30B4:"go",\u30B5:"sa",\u30B7:"si",\u30B9:"su",\u30BB:"se",\u30BD:"so",\u30B6:"za",\u30B8:"zi",\u30BA:"zu",\u30BC:"ze",\u30BE:"zo",\u30BF:"ta",\u30C1:"ti",\u30C4:"tu",\u30C6:"te",\u30C8:"to",\u30C0:"da",\u30C2:"di",\u30C5:"du",\u30C7:"de",\u30C9:"do",\u30CA:"na",\u30CB:"ni",\u30CC:"nu",\u30CD:"ne",\u30CE:"no",\u30CF:"ha",\u30D2:"hi",\u30D5:"hu",\u30D8:"he",\u30DB:"ho",\u30D0:"ba",\u30D3:"bi",\u30D6:"bu",\u30D9:"be",\u30DC:"bo",\u30D1:"pa",\u30D4:"pi",\u30D7:"pu",\u30DA:"pe",\u30DD:"po",\u30DE:"ma",\u30DF:"mi",\u30E0:"mu",\u30E1:"me",\u30E2:"mo",\u30E4:"ya",\u30E6:"yu",\u30E8:"yo",\u30E9:"ra",\u30EA:"ri",\u30EB:"ru",\u30EC:"re",\u30ED:"ro",\u30EF:"wa",\u30F2:"wo",\u30F3:"n",\u30F4:"vu",\u30A1:"a",\u30A3:"i",\u30A5:"u",\u30A7:"e",\u30A9:"o",\u30E3:"ya",\u30E5:"yu",\u30E7:"yo"},W={\u30AD\u30E3:"kya",\u30AD\u30E5:"kyu",\u30AD\u30E7:"kyo",\u30AD\u30A7:"kye",\u30AE\u30E3:"gya",\u30AE\u30E5:"gyu",\u30AE\u30E7:"gyo",\u30B7\u30E3:"sya",\u30B7\u30E5:"syu",\u30B7\u30E7:"syo",\u30B7\u30A7:"sye",\u30B8\u30E3:"zya",\u30B8\u30E5:"zyu",\u30B8\u30E7:"zyo",\u30B8\u30A7:"zye",\u30C1\u30E3:"tya",\u30C1\u30E5:"tyu",\u30C1\u30E7:"tyo",\u30C1\u30A7:"tye",\u30C2\u30E3:"dya",\u30C2\u30E5:"dyu",\u30C2\u30E7:"dyo",\u30CB\u30E3:"nya",\u30CB\u30E5:"nyu",\u30CB\u30E7:"nyo",\u30D2\u30E3:"hya",\u30D2\u30E5:"hyu",\u30D2\u30E7:"hyo",\u30D3\u30E3:"bya",\u30D3\u30E5:"byu",\u30D3\u30E7:"byo",\u30D4\u30E3:"pya",\u30D4\u30E5:"pyu",\u30D4\u30E7:"pyo",\u30DF\u30E3:"mya",\u30DF\u30E5:"myu",\u30DF\u30E7:"myo",\u30EA\u30E3:"rya",\u30EA\u30E5:"ryu",\u30EA\u30E7:"ryo",\u30D5\u30A1:"fa",\u30D5\u30A3:"fi",\u30D5\u30A7:"fe",\u30D5\u30A9:"fo",\u30F4\u30A1:"va",\u30F4\u30A3:"vi",\u30F4\u30A7:"ve",\u30F4\u30A9:"vo",\u30A6\u30A3:"wi",\u30A6\u30A7:"we",\u30A6\u30A9:"wo",\u30C6\u30A3:"ti",\u30C8\u30A5:"tu",\u30C7\u30A3:"di",\u30C9\u30A5:"du",\u30C4\u30A1:"tua",\u30C4\u30A3:"tui",\u30C4\u30A7:"tue",\u30C4\u30A9:"tuo",\u30A4\u30A7:"ye"};var z={\u30A2:"a",\u30A4:"i",\u30A6:"u",\u30A8:"e",\u30AA:"o",\u30AB:"ka",\u30AD:"ki",\u30AF:"ku",\u30B1:"ke",\u30B3:"ko",\u30AC:"ga",\u30AE:"gi",\u30B0:"gu",\u30B2:"ge",\u30B4:"go",\u30B5:"sa",\u30B7:"shi",\u30B9:"su",\u30BB:"se",\u30BD:"so",\u30B6:"za",\u30B8:"ji",\u30BA:"zu",\u30BC:"ze",\u30BE:"zo",\u30BF:"ta",\u30C1:"chi",\u30C4:"tsu",\u30C6:"te",\u30C8:"to",\u30C0:"da",\u30C2:"di",\u30C5:"du",\u30C7:"de",\u30C9:"do",\u30CA:"na",\u30CB:"ni",\u30CC:"nu",\u30CD:"ne",\u30CE:"no",\u30CF:"ha",\u30D2:"hi",\u30D5:"fu",\u30D8:"he",\u30DB:"ho",\u30D0:"ba",\u30D3:"bi",\u30D6:"bu",\u30D9:"be",\u30DC:"bo",\u30D1:"pa",\u30D4:"pi",\u30D7:"pu",\u30DA:"pe",\u30DD:"po",\u30DE:"ma",\u30DF:"mi",\u30E0:"mu",\u30E1:"me",\u30E2:"mo",\u30E4:"ya",\u30E6:"yu",\u30E8:"yo",\u30E9:"ra",\u30EA:"ri",\u30EB:"ru",\u30EC:"re",\u30ED:"ro",\u30EF:"wa",\u30F2:"wo",\u30F3:"n",\u30F4:"vu",\u30A1:"a",\u30A3:"i",\u30A5:"u",\u30A7:"e",\u30A9:"o",\u30E3:"ya",\u30E5:"yu",\u30E7:"yo"},v={\u30AD\u30E3:"kya",\u30AD\u30E5:"kyu",\u30AD\u30E7:"kyo",\u30AD\u30A7:"kye",\u30AE\u30E3:"gya",\u30AE\u30E5:"gyu",\u30AE\u30E7:"gyo",\u30B7\u30E3:"sha",\u30B7\u30E5:"shu",\u30B7\u30E7:"sho",\u30B7\u30A7:"she",\u30B8\u30E3:"ja",\u30B8\u30E5:"ju",\u30B8\u30E7:"jo",\u30B8\u30A7:"je",\u30C1\u30E3:"cha",\u30C1\u30E5:"chu",\u30C1\u30E7:"cho",\u30C1\u30A7:"che",\u30C2\u30E3:"dya",\u30C2\u30E5:"dyu",\u30C2\u30E7:"dyo",\u30CB\u30E3:"nya",\u30CB\u30E5:"nyu",\u30CB\u30E7:"nyo",\u30D2\u30E3:"hya",\u30D2\u30E5:"hyu",\u30D2\u30E7:"hyo",\u30D3\u30E3:"bya",\u30D3\u30E5:"byu",\u30D3\u30E7:"byo",\u30D4\u30E3:"pya",\u30D4\u30E5:"pyu",\u30D4\u30E7:"pyo",\u30DF\u30E3:"mya",\u30DF\u30E5:"myu",\u30DF\u30E7:"myo",\u30EA\u30E3:"rya",\u30EA\u30E5:"ryu",\u30EA\u30E7:"ryo",\u30D5\u30A1:"fa",\u30D5\u30A3:"fi",\u30D5\u30A7:"fe",\u30D5\u30A9:"fo",\u30F4\u30A1:"va",\u30F4\u30A3:"vi",\u30F4\u30A7:"ve",\u30F4\u30A9:"vo",\u30A6\u30A3:"wi",\u30A6\u30A7:"we",\u30A6\u30A9:"wo",\u30C6\u30A3:"ti",\u30C8\u30A5:"tu",\u30C7\u30A3:"di",\u30C9\u30A5:"du",\u30C4\u30A1:"tsa",\u30C4\u30A3:"tsi",\u30C4\u30A7:"tse",\u30C4\u30A9:"tso",\u30A4\u30A7:"ye"};var y={single:F,digraphs:W},b={single:z,digraphs:v};function _(t){return t==="both"||t==="kunrei"}function I(t){return t==="both"||t==="hepburn"}function J(t,n){if(t.length===2){let o=n.digraphs[t];if(o!==void 0)return o}let e=n.single[t];return e!==void 0?e:t.toLowerCase()}function Y(t){return/^[bcdfghjklmnpqrstvwxyz]/.test(t)}var _t="\u30C3",It="\u30FC",xt=new Set(["\u30A1","\u30A3","\u30A5","\u30A7","\u30A9","\u30E3","\u30E5","\u30E7","\u30EE"]),Rt=/[ァ-ヺー]/,Ot=/[ァ-ヺ]/,Ut=/[0-9a-z]/;function Lt(t){return Rt.test(t)||Ut.test(t)}function Mt(t){let n=[],e=0,o=!1,r=-1;for(;e<t.length;){let i=t[e];if(i===_t){o||(o=!0,r=e),e+=1;continue}if(i===It){let u=n[n.length-1];u&&(u.kanaLen+=1),e+=1;continue}let a=o?r:e,s=e+1<t.length?t[e+1]:"",l=s!==""&&xt.has(s)&&Ot.test(i)?2:1,f=t.slice(e,e+l);n.push({core:f,sokuon:o,kanaStart:a,kanaLen:e+l-a}),o=!1,r=-1,e+=l}return n}function Ht(t,n){let e=[],o=new Set,r=0,i="";for(let a of t){let s=J(a.core,n);a.sokuon&&s.length>0&&Y(s)&&(s=s[0]+s),o.add(r),e.push({kanaStart:a.kanaStart,kanaLen:a.kanaLen,romajiStart:r,romajiLen:s.length}),r+=s.length,i+=s}return{text:i,syllables:e,boundaries:o}}function x(t,n){return Ht(Mt(t),n)}function H(t,n){return x(t,n).text}function X(t){let n=new Set([0]);for(let e=0;e<t.length;e++)if(!Lt(t[e])){let o=e+1;o<t.length&&n.add(o)}return n}function R(t){let n="^"+t+"$",e=new Set;for(let o=0;o+1<n.length;o++)e.add(n.slice(o,o+2));return e}function N(t){let n=0;for(let e=0;e<t.length;e++)n|=1<<t.charCodeAt(e)%31;return n}function $(t){let n=0,e=t;for(;e!==0;)e&=e-1,n++;return n}function Q(t,n,e){let o=G(t),r=_(e)?x(o.text,y):null,i=I(e)?x(o.text,b):null;return{refIndex:n,raw:t,kana:o,kanaBoundaries:X(o.text),kanaMask:N(o.text),kunreiMask:r?N(r.text):0,hepburnMask:i?N(i.text):0,kunrei:r,hepburn:i,bigrams:null}}function V(t){return t.bigrams===null&&(t.bigrams=R(t.kana.text)),t.bigrams}var Pt={a:"\u3042",i:"\u3044",u:"\u3046",e:"\u3048",o:"\u304A",k:{a:"\u304B",i:"\u304D",u:"\u304F",e:"\u3051",o:"\u3053"},s:{a:"\u3055",i:"\u3057",u:"\u3059",e:"\u305B",o:"\u305D"},t:{a:"\u305F",i:"\u3061",u:"\u3064",e:"\u3066",o:"\u3068"},n:{a:"\u306A",i:"\u306B",u:"\u306C",e:"\u306D",o:"\u306E"},h:{a:"\u306F",i:"\u3072",u:"\u3075",e:"\u3078",o:"\u307B"},m:{a:"\u307E",i:"\u307F",u:"\u3080",e:"\u3081",o:"\u3082"},y:{a:"\u3084",u:"\u3086",o:"\u3088"},r:{a:"\u3089",i:"\u308A",u:"\u308B",e:"\u308C",o:"\u308D"},w:{a:"\u308F",i:"\u3090",e:"\u3091",o:"\u3092"},g:{a:"\u304C",i:"\u304E",u:"\u3050",e:"\u3052",o:"\u3054"},z:{a:"\u3056",i:"\u3058",u:"\u305A",e:"\u305C",o:"\u305E"},d:{a:"\u3060",i:"\u3062",u:"\u3065",e:"\u3067",o:"\u3069"},b:{a:"\u3070",i:"\u3073",u:"\u3076",e:"\u3079",o:"\u307C"},p:{a:"\u3071",i:"\u3074",u:"\u3077",e:"\u307A",o:"\u307D"},v:{a:"\u3094\u3041",i:"\u3094\u3043",u:"\u3094",e:"\u3094\u3047",o:"\u3094\u3049"}},Z={k:"\u304D",s:"\u3057",t:"\u3061",n:"\u306B",h:"\u3072",m:"\u307F",r:"\u308A",g:"\u304E",z:"\u3058",d:"\u3062",b:"\u3073",p:"\u3074",v:"\u3094",q:"\u304F",f:"\u3075"},tt={ya:"\u3083",yi:"\u3043",yu:"\u3085",ye:"\u3047",yo:"\u3087"},nt={a:"\u3041",i:"\u3043",u:"\u3045",e:"\u3047",o:"\u3049"},q={sh:"sy",ch:"ty",cy:"ty",chy:"ty",shy:"sy",j:"zy",jy:"zy",shi:"si",chi:"ti",tsu:"tu",ji:"zi",fu:"hu"},Kt={tu:"\u3063",wa:"\u308E",ka:"\u30F5",ke:"\u30F6",...nt,...tt},Dt={yi:"\u3044",wu:"\u3046",ye:"\u3044\u3047",wi:"\u3046\u3043",we:"\u3046\u3047",kwa:"\u304F\u3041",whu:"\u3046",tha:"\u3066\u3083",thu:"\u3066\u3085",tho:"\u3066\u3087",dha:"\u3067\u3083",dhu:"\u3067\u3085",dho:"\u3067\u3087"},jt={wh:"\u3046",kw:"\u304F",qw:"\u304F",q:"\u304F",gw:"\u3050",sw:"\u3059",ts:"\u3064",th:"\u3066",tw:"\u3068",dh:"\u3067",dw:"\u3069",fw:"\u3075",f:"\u3075"};function et(t){return Object.entries(t).reduce((n,[e,o])=>(n[e]=typeof o=="string"?{"":o}:et(o),n),{})}function wt(t,n){return n.split("").reduce((e,o)=>(e[o]===void 0&&(e[o]={}),e[o]),t)}function Ct(){let t=et(Pt),n=r=>wt(t,r);Object.entries(Z).forEach(([r,i])=>{Object.entries(tt).forEach(([a,s])=>{n(r+a)[""]=i+s})}),Object.entries(jt).forEach(([r,i])=>{Object.entries(nt).forEach(([a,s])=>{n(r+a)[""]=i+s})}),["n","n'","xn"].forEach(r=>{n(r)[""]="\u3093"}),t.c=JSON.parse(JSON.stringify(t.k)),Object.entries(q).forEach(([r,i])=>{let a=r.slice(0,r.length-1),s=r.charAt(r.length-1),l=n(a);l[s]=JSON.parse(JSON.stringify(n(i)))});function e(r){return[...Object.entries(q),["c","k"]].reduce((i,[a,s])=>r.startsWith(s)?i.concat(r.replace(s,a)):i,[])}Object.entries(Kt).forEach(([r,i])=>{let a=c=>c.charAt(c.length-1),s=c=>c.slice(0,c.length-1),l=`x${r}`,f=n(l);f[""]=i;let u=n(`l${s(r)}`);u[a(r)]=f,e(r).forEach(c=>{["l","x"].forEach(p=>{let h=n(p+s(c));h[a(c)]=n(p+r)})})}),Object.entries(Dt).forEach(([r,i])=>{n(r)[""]=i});function o(r){return Object.entries(r).reduce((i,[a,s])=>(i[a]=a?o(s):`\u3063${s}`,i),{})}return[...Object.keys(Z),"c","y","w","j"].forEach(r=>{let i=t[r];i[r]=o(i)}),delete t.n.n,Object.freeze(JSON.parse(JSON.stringify(t)))}var P=null;function Bt(){return P==null&&(P=Ct()),P}function Gt(t,n){let e=n;function o(a,s){if(a[s]!==void 0)return Object.assign({"":a[""]+s},a[s])}function r(a,s){let l=a.charAt(0);return i(Object.assign({"":l},e[l]),a.slice(1),s,s+1)}function i(a,s,l,f){if(!s)return a[""]?[[l,f,a[""]]]:[];if(Object.keys(a).length===1)return[[l,f,a[""]],...r(s,f)];let u=o(a,s.charAt(0));return u===void 0?[[l,f,a[""]],...r(s,f)]:i(u,s.slice(1),l,f+1)}return r(t,0)}function ot(t){return Gt(t.toLowerCase(),Bt()).map(n=>n[2]??"").join("")}function rt(t){return ot(t)}function st(t,n){let e=M(t,"preKana"),o=M(rt(e),"postKana"),r=_(n)?H(o,y):null,i=I(n)?H(o,b):null;return{kana:o,singleChar:Ft(o),literal:/^[a-z0-9]$/.test(e)&&e!==o?e:null,kunrei:r,hepburn:i,kanaMask:N(o),kunreiMask:r!==null?N(r):0,hepburnMask:i!==null?N(i):0,bigrams:null}}function Ft(t){return t.length===0?!1:t.length===String.fromCodePoint(t.codePointAt(0)).length}function it(t){return t.bigrams===null&&(t.bigrams=R(t.kana)),t.bigrams}var Wt=["-"," ","\u30FB","_"];function zt(t){return t===!1||t===void 0?[]:t===!0?Wt:t}function vt(t){return t.replace(/[\\\]^-]/g,"\\$&")}function at(t,n){let e=zt(n);if(e.length===0)return t===""?[]:[t];let o=e.map(vt).join(""),r=new RegExp(`[${o}]`,"g");if(!r.test(t))return t===""?[]:[t];let i=[],a=new Set,s=u=>{u!==""&&!a.has(u)&&(a.add(u),i.push(u))};s(t);let l=[...t].at(-1);return e.includes(l)||s(t.replace(r,"")),s(t.replace(r," ")),i}function Jt(t,n){let e=[];for(let o=0;o<t;o++)e.push(n+o);return e}function ct(t,n,e){return e?n?.5+t/2:t/2:t}function O(t,n,e,o,r){if(t.length===0||n.length===0||!n.startsWith(t))return null;let i=t.length/n.length*o;return{intraScore:ct(i,!0,r),space:e,offset:0,len:t.length}}function U(t,n,e,o,r,i){if(t.length<r||n.length===0)return null;let a=n.indexOf(t);if(a<=0)return null;let s=t.length/n.length*o;return{intraScore:ct(s,!1,i),space:e,offset:a,len:t.length}}var ut=(t,n)=>{let e=null,o=f=>{f!==null&&(e===null||f.intraScore>e.intraScore)&&(e=f)},r=n.kana.text,i=n.kunrei?.text??"",a=n.hepburn?.text??"",s=t.singleChar;if(o(O(t.kana,r,"kana",1,s)),o(U(t.kana,r,"kana",.9,1,s)),t.literal!==null&&(o(O(t.literal,r,"kana",1,s)),o(U(t.literal,r,"kana",.9,1,s))),t.kunrei!==null&&o(O(t.kunrei,i,"kunrei",.97,s)),t.hepburn!==null&&o(O(t.hepburn,a,"hepburn",.97*.99,s)),t.kunrei!==null&&o(U(t.kunrei,i,"kunrei",.87,2,s)),t.hepburn!==null&&o(U(t.hepburn,a,"hepburn",.87*.99,2,s)),e===null)return null;let l=e;return{tier:1,intraScore:l.intraScore,space:l.space,positions:Jt(l.len,l.offset)}};var K=new Int32Array(0),lt=new Uint8Array(0);function Yt(t){K.length<t&&(K=new Int32Array(t),lt=new Uint8Array(t))}function Xt(t,n){let e=0;for(let o=0;o<n.length&&e<t.length;o++)t[e]===n[o]&&e++;return e===t.length}function $t(t,n,e){let o=t.length,r=n.length;if(o===0||r===0||!Xt(t,n))return null;let i=r+1;Yt((o+1)*i);let a=K,s=lt;for(let A=0;A<=r;A++)a[A]=0,s[A]=0;for(let A=1;A<=o;A++){let S=A*i,T=(A-1)*i,E=t[A-1];a[S]=-1e9,s[S]=0;for(let m=1;m<=r;m++){let k=-1e9,d=0,j=a[S+m-1];j>-1e9&&(k=j+(s[S+m-1]?-3:-1),d=0);let w=a[T+m-1];if(E===n[m-1]&&w>-1e9){let g=0;e.has(m-1)&&(g+=8),s[T+m-1]&&(g+=4),A===1&&(g+=2);let C=w+16+g;C>=k&&(k=C,d=1)}a[S+m]=k,s[S+m]=d}}let l=o*i,f=-1,u=-1e9;for(let A=o;A<=r;A++)a[l+A]>u&&(u=a[l+A],f=A);if(f<0||u===-1e9)return null;let c=[],p=o,h=f;for(;p>0&&h>0;)s[p*i+h]&&(c.push(h-1),p--),h--;return c.reverse(),c}function Qt(t,n,e,o){let r=0;for(let u of t)o.has(u)&&r++;let i=r/n,a=1,s=1;for(let u=1;u<t.length;u++)t[u]===t[u-1]+1?(s++,s>a&&(a=s)):s=1;let l=a/n,f=1-t[0]/e;return .55*i+.3*l+.15*f}var ft=(t,n)=>{let e=null,o=(i,a,s,l,f,u)=>{if(i===null||i.length<2||s.length===0||(a&~l)!==0)return;let c=$t(i,s,f);if(c===null)return;let p=Qt(c,i.length,s.length,f);(e===null||p>e.intraScore)&&(e={intraScore:p,space:u,positions:c})};if(o(t.kana,t.kanaMask,n.kana.text,n.kanaMask,n.kanaBoundaries,"kana"),n.kunrei&&o(t.kunrei,t.kunreiMask,n.kunrei.text,n.kunreiMask,n.kunrei.boundaries,"kunrei"),n.hepburn&&o(t.hepburn,t.hepburnMask,n.hepburn.text,n.hepburnMask,n.hepburn.boundaries,"hepburn"),e===null)return null;let r=e;return{tier:2,intraScore:r.intraScore,space:r.space,positions:r.positions}};var Vt=2;function Zt(t){return Math.max(1,Math.ceil(t/3))}var D=new Int32Array(0);function qt(t){return D.length<t&&(D=new Int32Array(t)),D}function tn(t,n,e){let o=t.length,r=n.length;if(o===0)return 0;if(r+e<o)return e+1;let i=r+1,a=qt((o+1)*i);for(let c=0;c<=r;c++)a[c]=c;for(let c=1;c<=o;c++){let p=c*i,h=(c-1)*i,A=(c-2)*i;a[p]=c;let S=t[c-1],T=c>1?t[c-2]:"",E=1/0;for(let m=1;m<=r;m++){let k=S===n[m-1]?0:1,d=Math.min(a[h+m]+1,a[p+m-1]+1,a[h+m-1]+k);c>1&&m>1&&S===n[m-2]&&T===n[m-1]&&(d=Math.min(d,a[A+m-2]+1)),a[p+m]=d,d<E&&(E=d)}if(E>e)return e+1}let s=o*i,l=Math.max(0,o-e),f=Math.min(r,o+e),u=a[s+l];for(let c=l+1;c<=f;c++)a[s+c]<u&&(u=a[s+c]);return u}var pt=(t,n)=>{let e=null,o=(i,a,s,l,f)=>{if(i===null||i.length<Vt||s.length===0)return;let u=Zt(i.length);if($(a&~l)>u)return;let c=tn(i,s,u);if(c>u)return;let p=1-c/(u+1);(e===null||p>e.intraScore)&&(e={intraScore:p,space:f})};if(o(t.kana,t.kanaMask,n.kana.text,n.kanaMask,"kana"),n.kunrei&&t.kunrei!==null?o(t.kunrei,t.kunreiMask,n.kunrei.text,n.kunreiMask,"kunrei"):n.hepburn&&t.hepburn!==null&&o(t.hepburn,t.hepburnMask,n.hepburn.text,n.hepburnMask,"hepburn"),e===null)return null;let r=e;return{tier:3,intraScore:r.intraScore,space:r.space,positions:null}};var nn=.8,en=.2,on=.3,ht=(t,n)=>{let e=it(t),o=V(n);if(e.size===0||o.size===0)return null;let r=0;for(let f of e)o.has(f)&&r++;let i=e.size-r,a=o.size-r,s=r+nn*i+en*a;if(s===0)return null;let l=r/s;return l<on?null:{tier:4,intraScore:l,space:"kana",positions:null}};var rn=[ut,ft,pt,ht];function sn(t){return t<0?0:t>1?1:t}function an(t){return(4-t.tier+sn(t.intraScore))/4}function cn(t,n,e){let o=null;for(let r of e){let i=t(r,n);if(i===null)continue;let a=an(i);(o===null||a>o.score)&&(o={refIndex:n.refIndex,score:a,tier:i.tier,match:i})}return o}function At(t,n,e){let o=t.trim();if(o==="")return[];let r=at(o,e.separatorExpansion);if(r.length===0)return[];let i=r.map(c=>st(c,e.romaji)),a=rn.slice(0,e.maxTier),{limit:s,minScore:l}=e,f=[],u=new Uint8Array(n.length);for(let c of a){for(let p=0;p<n.length;p++){if(u[p])continue;let h=cn(c,n[p],i);h!==null&&(u[p]=1,h.score>=l&&f.push(h))}if(s!==void 0&&f.length>=s)break}return f.sort((c,p)=>p.score-c.score||c.refIndex-p.refIndex),s!==void 0?f.slice(0,s):f}function un(t,n){for(let e of n)if(t>=e.romajiStart&&t<e.romajiStart+e.romajiLen){let o=[];for(let r=0;r<e.kanaLen;r++)o.push(e.kanaStart+r);return o}return[]}function ln(t){if(t.length===0)return[];t.sort((e,o)=>e[0]-o[0]||e[1]-o[1]);let n=[];for(let[e,o]of t){let r=n[n.length-1];r&&e<=r[1]?o>r[1]&&(r[1]=o):n.push([e,o])}return n}function mt(t,n){if(n.positions===null)return[];let e=new Set;if(n.space==="kana")for(let i of n.positions)e.add(i);else{let i=n.space==="kunrei"?t.kunrei:t.hepburn;if(i)for(let a of n.positions)for(let s of un(a,i.syllables))e.add(s)}let o=t.kana.map,r=[];for(let i of e){let a=o[i];a&&r.push([a[0],a[1]])}return ln(r)}var fn=3,pn=0;function hn(t,n,e){return{romaji:t,separatorExpansion:n,maxTier:e.maxTier??fn,minScore:e.minScore??pn,limit:e.limit,includeMatches:e.includeMatches??!1}}function St(t,n={}){let e=n.getText??(s=>s),o=n.romaji??"both",r=n.separatorExpansion??!1,i={limit:n.limit,maxTier:n.maxTier,minScore:n.minScore,includeMatches:n.includeMatches},a=t.map((s,l)=>Q(e(s),l,o));return{size:t.length,search(s,l={}){let f={...i,...l},u=hn(o,r,f);return At(s,a,u).map(p=>{let h={item:t[p.refIndex],refIndex:p.refIndex,score:p.score,tier:p.tier};return u.includeMatches&&p.match.positions!==null&&(h.matches=mt(a[p.refIndex],p.match)),h})}}}function An(t,n,e={}){return St(n,e).search(t)}return gt(mn);})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ycookiey/yfuzzy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Japanese-aware fuzzy search library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"type": "module",
|
|
27
27
|
"main": "./dist/index.js",
|
|
28
28
|
"types": "./dist/index.d.ts",
|
|
29
|
+
"unpkg": "./dist/yfuzzy.min.js",
|
|
30
|
+
"jsdelivr": "./dist/yfuzzy.min.js",
|
|
29
31
|
"exports": {
|
|
30
32
|
".": {
|
|
31
33
|
"types": "./dist/index.d.ts",
|
|
@@ -39,7 +41,7 @@
|
|
|
39
41
|
"THIRD_PARTY_NOTICES.md"
|
|
40
42
|
],
|
|
41
43
|
"scripts": {
|
|
42
|
-
"build": "tsc -p tsconfig.build.json",
|
|
44
|
+
"build": "tsc -p tsconfig.build.json && node scripts/build-browser.mjs",
|
|
43
45
|
"typecheck": "tsc -p tsconfig.json",
|
|
44
46
|
"test": "vitest run",
|
|
45
47
|
"test:watch": "vitest",
|
|
@@ -47,6 +49,7 @@
|
|
|
47
49
|
"prepublishOnly": "npm run build"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
52
|
+
"esbuild": "0.28.1",
|
|
50
53
|
"fuse.js": "^7.4.2",
|
|
51
54
|
"fuzzysort": "^3.1.0",
|
|
52
55
|
"typescript": "^6.0.3",
|