@ycookiey/yfuzzy 0.1.2 → 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/query.d.ts +8 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +9 -1
- package/dist/query.js.map +1 -1
- package/dist/tiers/tier1-exact.d.ts.map +1 -1
- package/dist/tiers/tier1-exact.js +32 -14
- package/dist/tiers/tier1-exact.js.map +1 -1
- package/dist/yfuzzy.min.js +2 -0
- package/package.json +9 -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
|
### 文字列配列
|
package/dist/query.d.ts
CHANGED
|
@@ -3,6 +3,14 @@ import { type RomajiOption } from './romaji/convert.js';
|
|
|
3
3
|
export interface NormalizedQuery {
|
|
4
4
|
/** 正規化カナ形 */
|
|
5
5
|
readonly kana: string;
|
|
6
|
+
/** 正規化カナ形が1コードポイントか(tier 1 の1文字レンジ分離用、spec 4.1) */
|
|
7
|
+
readonly singleChar: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* かな変換前のリテラル形(spec 2.2)。英数1コードポイントのクエリが変換で
|
|
10
|
+
* 形を変えた場合(母音 a/i/u/e/o と n)のみ非 null。tier 1 かな空間で並列照合し、
|
|
11
|
+
* ASCII データへの中間一致が変換で不可能になるのを防ぐ
|
|
12
|
+
*/
|
|
13
|
+
readonly literal: string | null;
|
|
6
14
|
/** 訓令式ローマ字(romaji オプションで無効時 null) */
|
|
7
15
|
readonly kunrei: string | null;
|
|
8
16
|
/** ヘボン式ローマ字(romaji オプションで無効時 null) */
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAK7B,oBAAoB;AACpB,MAAM,WAAW,eAAe;IAC9B,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC7B;AAED,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAK7B,oBAAoB;AACpB,MAAM,WAAW,eAAe;IAC9B,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+BAA+B;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC7B;AAED,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CAgBjF;AAOD,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAGlE"}
|
package/dist/query.js
CHANGED
|
@@ -11,11 +11,14 @@ import { generateBigrams } from './bigram.js';
|
|
|
11
11
|
import { charMask } from './charmask.js';
|
|
12
12
|
/** クエリ文字列(1経路分)を正規化する */
|
|
13
13
|
export function normalizeQuery(raw, romaji) {
|
|
14
|
-
const
|
|
14
|
+
const pre = applyTransforms(raw, 'preKana');
|
|
15
|
+
const kana = applyTransforms(toKana(pre), 'postKana');
|
|
15
16
|
const kunrei = kunreiEnabled(romaji) ? kanaToRomaji(kana, KUNREI) : null;
|
|
16
17
|
const hepburn = hepburnEnabled(romaji) ? kanaToRomaji(kana, HEPBURN) : null;
|
|
17
18
|
return {
|
|
18
19
|
kana,
|
|
20
|
+
singleChar: isSingleCodePoint(kana),
|
|
21
|
+
literal: /^[a-z0-9]$/.test(pre) && pre !== kana ? pre : null,
|
|
19
22
|
kunrei,
|
|
20
23
|
hepburn,
|
|
21
24
|
kanaMask: charMask(kana),
|
|
@@ -24,6 +27,11 @@ export function normalizeQuery(raw, romaji) {
|
|
|
24
27
|
bigrams: null,
|
|
25
28
|
};
|
|
26
29
|
}
|
|
30
|
+
function isSingleCodePoint(s) {
|
|
31
|
+
if (s.length === 0)
|
|
32
|
+
return false;
|
|
33
|
+
return s.length === String.fromCodePoint(s.codePointAt(0)).length;
|
|
34
|
+
}
|
|
27
35
|
/** tier 4 実行時に bigram を遅延生成してキャッシュする */
|
|
28
36
|
export function ensureQueryBigrams(q) {
|
|
29
37
|
if (q.bigrams === null)
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,6CAA6C;AAC7C,EAAE;AACF,wDAAwD;AACxD,wDAAwD;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,6CAA6C;AAC7C,EAAE;AACF,wDAAwD;AACxD,wDAAwD;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,MAAM,EACN,OAAO,EACP,aAAa,EACb,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA0BzC,yBAAyB;AACzB,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,MAAoB;IAC9D,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,OAAO;QACL,IAAI;QACJ,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;QACnC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;QAC5D,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;QACxB,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAS;IAClC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier1-exact.d.ts","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tier1-exact.d.ts","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,YAAY,CAAC;AA8DjD,eAAO,MAAM,UAAU,EAAE,OA+BxB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// tier 1: 完全マッチ層(spec 4.1)。クエリ文字列がデータに連続して現れる。
|
|
2
|
-
//
|
|
3
|
-
// 優先順(spec 5章タイブレーク): かな前方 > かな部分 >
|
|
2
|
+
// サブマッチを固定優先順で評価し、intraScore 最大を採用(同点は先順位=表の記載順)。
|
|
3
|
+
// 優先順(spec 5章タイブレーク): かな前方 > かな部分 > リテラル前方 > リテラル部分 >
|
|
4
|
+
// romaji前方(訓令>ヘボン) > romaji部分(訓令>ヘボン)。
|
|
4
5
|
const KANA_PREFIX = 1.0;
|
|
5
6
|
const KANA_SUBSTRING = 0.9;
|
|
6
7
|
const ROMAJI_PREFIX = 0.97;
|
|
@@ -12,20 +13,31 @@ function range(len, offset) {
|
|
|
12
13
|
p.push(offset + i);
|
|
13
14
|
return p;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
// 1文字クエリ(正規化後1コードポイント)のレンジ分離(spec 4.1):
|
|
17
|
+
// 前方一致系 = 0.5 + raw/2 ∈ (0.5, 1]、部分一致系 = raw/2 ∈ (0, 0.5]。
|
|
18
|
+
// coverage 差で短いデータの部分一致が長いデータの前方一致を逆転しないことを保証する。
|
|
19
|
+
// 完全一致(coverage 1.0 の前方)は 1.0 のまま。
|
|
20
|
+
function mapScore(raw, isPrefix, single) {
|
|
21
|
+
if (!single)
|
|
22
|
+
return raw;
|
|
23
|
+
return isPrefix ? 0.5 + raw / 2 : raw / 2;
|
|
24
|
+
}
|
|
25
|
+
function prefix(query, data, space, factor, single) {
|
|
16
26
|
if (query.length === 0 || data.length === 0)
|
|
17
27
|
return null;
|
|
18
28
|
if (!data.startsWith(query))
|
|
19
29
|
return null;
|
|
20
|
-
|
|
30
|
+
const raw = (query.length / data.length) * factor;
|
|
31
|
+
return { intraScore: mapScore(raw, true, single), space, offset: 0, len: query.length };
|
|
21
32
|
}
|
|
22
|
-
function substring(query, data, space, factor, minLen) {
|
|
33
|
+
function substring(query, data, space, factor, minLen, single) {
|
|
23
34
|
if (query.length < minLen || data.length === 0)
|
|
24
35
|
return null;
|
|
25
36
|
const idx = data.indexOf(query);
|
|
26
37
|
if (idx <= 0)
|
|
27
38
|
return null; // 0 = 前方一致(別サブマッチが担当)、<0 = 非一致
|
|
28
|
-
|
|
39
|
+
const raw = (query.length / data.length) * factor;
|
|
40
|
+
return { intraScore: mapScore(raw, false, single), space, offset: idx, len: query.length };
|
|
29
41
|
}
|
|
30
42
|
export const tier1Exact = (q, e) => {
|
|
31
43
|
let best = null;
|
|
@@ -37,20 +49,26 @@ export const tier1Exact = (q, e) => {
|
|
|
37
49
|
const kana = e.kana.text;
|
|
38
50
|
const kunrei = e.kunrei?.text ?? '';
|
|
39
51
|
const hepburn = e.hepburn?.text ?? '';
|
|
52
|
+
const single = q.singleChar;
|
|
40
53
|
// 1. かな前方一致
|
|
41
|
-
consider(prefix(q.kana, kana, 'kana', KANA_PREFIX));
|
|
54
|
+
consider(prefix(q.kana, kana, 'kana', KANA_PREFIX, single));
|
|
42
55
|
// 2. かな部分一致(かなは1文字でも可)
|
|
43
|
-
consider(substring(q.kana, kana, 'kana', KANA_SUBSTRING, 1));
|
|
44
|
-
// 3.
|
|
56
|
+
consider(substring(q.kana, kana, 'kana', KANA_SUBSTRING, 1, single));
|
|
57
|
+
// 3. リテラル前方/部分一致(かな変換で形が変わった英数1文字クエリのみ。かな空間)
|
|
58
|
+
if (q.literal !== null) {
|
|
59
|
+
consider(prefix(q.literal, kana, 'kana', KANA_PREFIX, single));
|
|
60
|
+
consider(substring(q.literal, kana, 'kana', KANA_SUBSTRING, 1, single));
|
|
61
|
+
}
|
|
62
|
+
// 4. romaji 前方一致(訓令 → ヘボン。前方は最小長条件なし)
|
|
45
63
|
if (q.kunrei !== null)
|
|
46
|
-
consider(prefix(q.kunrei, kunrei, 'kunrei', ROMAJI_PREFIX));
|
|
64
|
+
consider(prefix(q.kunrei, kunrei, 'kunrei', ROMAJI_PREFIX, single));
|
|
47
65
|
if (q.hepburn !== null)
|
|
48
|
-
consider(prefix(q.hepburn, hepburn, 'hepburn', ROMAJI_PREFIX * HEPBURN_PENALTY));
|
|
49
|
-
//
|
|
66
|
+
consider(prefix(q.hepburn, hepburn, 'hepburn', ROMAJI_PREFIX * HEPBURN_PENALTY, single));
|
|
67
|
+
// 5. romaji 部分一致(訓令 → ヘボン。クエリ romaji 2文字以上)
|
|
50
68
|
if (q.kunrei !== null)
|
|
51
|
-
consider(substring(q.kunrei, kunrei, 'kunrei', ROMAJI_SUBSTRING, 2));
|
|
69
|
+
consider(substring(q.kunrei, kunrei, 'kunrei', ROMAJI_SUBSTRING, 2, single));
|
|
52
70
|
if (q.hepburn !== null)
|
|
53
|
-
consider(substring(q.hepburn, hepburn, 'hepburn', ROMAJI_SUBSTRING * HEPBURN_PENALTY, 2));
|
|
71
|
+
consider(substring(q.hepburn, hepburn, 'hepburn', ROMAJI_SUBSTRING * HEPBURN_PENALTY, 2, single));
|
|
54
72
|
if (best === null)
|
|
55
73
|
return null;
|
|
56
74
|
const c = best;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier1-exact.js","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"tier1-exact.js","sourceRoot":"","sources":["../../src/tiers/tier1-exact.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,12 +1,16 @@
|
|
|
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": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"author": "ycookiey",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/ycookiey/yfuzzy.git"
|
|
13
|
+
},
|
|
10
14
|
"keywords": [
|
|
11
15
|
"fuzzy",
|
|
12
16
|
"fuzzy-search",
|
|
@@ -22,6 +26,8 @@
|
|
|
22
26
|
"type": "module",
|
|
23
27
|
"main": "./dist/index.js",
|
|
24
28
|
"types": "./dist/index.d.ts",
|
|
29
|
+
"unpkg": "./dist/yfuzzy.min.js",
|
|
30
|
+
"jsdelivr": "./dist/yfuzzy.min.js",
|
|
25
31
|
"exports": {
|
|
26
32
|
".": {
|
|
27
33
|
"types": "./dist/index.d.ts",
|
|
@@ -35,7 +41,7 @@
|
|
|
35
41
|
"THIRD_PARTY_NOTICES.md"
|
|
36
42
|
],
|
|
37
43
|
"scripts": {
|
|
38
|
-
"build": "tsc -p tsconfig.build.json",
|
|
44
|
+
"build": "tsc -p tsconfig.build.json && node scripts/build-browser.mjs",
|
|
39
45
|
"typecheck": "tsc -p tsconfig.json",
|
|
40
46
|
"test": "vitest run",
|
|
41
47
|
"test:watch": "vitest",
|
|
@@ -43,6 +49,7 @@
|
|
|
43
49
|
"prepublishOnly": "npm run build"
|
|
44
50
|
},
|
|
45
51
|
"devDependencies": {
|
|
52
|
+
"esbuild": "0.28.1",
|
|
46
53
|
"fuse.js": "^7.4.2",
|
|
47
54
|
"fuzzysort": "^3.1.0",
|
|
48
55
|
"typescript": "^6.0.3",
|