yomitan-core 1.0.2 → 1.2.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.
Files changed (198) hide show
  1. package/README.md +8 -1
  2. package/dist/anki-connect-B2UXtiUS.js +6 -0
  3. package/dist/anki-connect-BXvjYYm0.cjs +6 -0
  4. package/dist/{anki-connect-B_YpChhu.cjs → anki-connect-DGx7Gr0H.cjs} +3 -3
  5. package/dist/{anki-connect-B_YpChhu.cjs.map → anki-connect-DGx7Gr0H.cjs.map} +1 -1
  6. package/dist/{anki-connect-697E04LF.js → anki-connect-Dau8nAXZ.js} +3 -3
  7. package/dist/{anki-connect-697E04LF.js.map → anki-connect-Dau8nAXZ.js.map} +1 -1
  8. package/dist/anki.cjs +6 -6
  9. package/dist/anki.d.cts.map +1 -1
  10. package/dist/anki.d.ts +2 -2
  11. package/dist/anki.d.ts.map +1 -1
  12. package/dist/anki.js +6 -6
  13. package/dist/{audio-ZuaDkaUZ.d.ts → audio-DN-FhZ5k.d.ts} +1 -1
  14. package/dist/{audio-ZuaDkaUZ.d.ts.map → audio-DN-FhZ5k.d.ts.map} +1 -1
  15. package/dist/{audio-url-generator-CgTMaTM2.js → audio-url-generator-C7mkxYeq.js} +2 -2
  16. package/dist/{audio-url-generator-CfXaxZ47.cjs → audio-url-generator-CZECihX-.cjs} +2 -2
  17. package/dist/{audio-url-generator-C23AXVj1.cjs → audio-url-generator-CorFRyBU.cjs} +2 -2
  18. package/dist/{audio-url-generator-C23AXVj1.cjs.map → audio-url-generator-CorFRyBU.cjs.map} +1 -1
  19. package/dist/{audio-url-generator-DykdzZJu.js → audio-url-generator-_6Qk0i3T.js} +2 -2
  20. package/dist/{audio-url-generator-DykdzZJu.js.map → audio-url-generator-_6Qk0i3T.js.map} +1 -1
  21. package/dist/audio.cjs +2 -2
  22. package/dist/audio.d.ts +2 -2
  23. package/dist/audio.js +2 -2
  24. package/dist/{batch-processor-CXZZhx5t.js → batch-processor-BR-gB3H3.js} +1 -1
  25. package/dist/{batch-processor-CXZZhx5t.js.map → batch-processor-BR-gB3H3.js.map} +1 -1
  26. package/dist/batch-processor-CSF1acTw.cjs +3 -0
  27. package/dist/{batch-processor-C8pSzqRE.cjs → batch-processor-DFqM_L-_.cjs} +1 -1
  28. package/dist/{batch-processor-C8pSzqRE.cjs.map → batch-processor-DFqM_L-_.cjs.map} +1 -1
  29. package/dist/batch-processor-Quo9jUyf.js +3 -0
  30. package/dist/{core-C_0QjRBI.d.ts → core-CRjMTF7c.d.ts} +1 -1
  31. package/dist/{core-C_0QjRBI.d.ts.map → core-CRjMTF7c.d.ts.map} +1 -1
  32. package/dist/database.d.ts +3 -3
  33. package/dist/debug-I2dyAd2e.cjs +51 -0
  34. package/dist/debug-I2dyAd2e.cjs.map +1 -0
  35. package/dist/debug-hF63AFkq.js +38 -0
  36. package/dist/debug-hF63AFkq.js.map +1 -0
  37. package/dist/{dictionary-CfzEFbXZ.d.ts → dictionary-DdxghSJP.d.ts} +1 -1
  38. package/dist/{dictionary-CfzEFbXZ.d.ts.map → dictionary-DdxghSJP.d.ts.map} +1 -1
  39. package/dist/{dictionary-data-util-BY_72f3u.cjs → dictionary-data-util-DmLJMtGc.cjs} +1 -1
  40. package/dist/{dictionary-data-util-BY_72f3u.cjs.map → dictionary-data-util-DmLJMtGc.cjs.map} +1 -1
  41. package/dist/{dictionary-data-util-CKDT7n2t.js → dictionary-data-util-gUUD9ElK.js} +1 -1
  42. package/dist/{dictionary-data-util-CKDT7n2t.js.map → dictionary-data-util-gUUD9ElK.js.map} +1 -1
  43. package/dist/{dictionary-database-BRAqOF_M.d.ts → dictionary-database-D0lvK2n3.d.ts} +2 -2
  44. package/dist/{dictionary-database-BRAqOF_M.d.ts.map → dictionary-database-D0lvK2n3.d.ts.map} +1 -1
  45. package/dist/{dictionary-importer-C7mNL5CJ.js → dictionary-importer-BPlLeF5R.js} +5 -5
  46. package/dist/{dictionary-importer-C7mNL5CJ.js.map → dictionary-importer-BPlLeF5R.js.map} +1 -1
  47. package/dist/{dictionary-importer-CbMwsqEX.cjs → dictionary-importer-BvgP1Fs9.cjs} +5 -5
  48. package/dist/{dictionary-importer-CbMwsqEX.cjs.map → dictionary-importer-BvgP1Fs9.cjs.map} +1 -1
  49. package/dist/{dictionary-importer-C-AlWsIN.d.ts → dictionary-importer-CDbCAbwG.d.ts} +2 -2
  50. package/dist/{dictionary-importer-C-AlWsIN.d.ts.map → dictionary-importer-CDbCAbwG.d.ts.map} +1 -1
  51. package/dist/dictionary-importer-DEMVqTjR.js +8 -0
  52. package/dist/dictionary-importer-Luz6usUQ.cjs +8 -0
  53. package/dist/{dictionary-update-checker-DE2ymYcs.js → dictionary-update-checker-CLbtQ48X.js} +2 -2
  54. package/dist/{dictionary-update-checker-DE2ymYcs.js.map → dictionary-update-checker-CLbtQ48X.js.map} +1 -1
  55. package/dist/dictionary-update-checker-CsS7MxK_.js +4 -0
  56. package/dist/{dictionary-update-checker-CU3q0aoP.cjs → dictionary-update-checker-DgjPsURI.cjs} +2 -2
  57. package/dist/{dictionary-update-checker-xIwF77-R.cjs → dictionary-update-checker-DmiIUoKw.cjs} +2 -2
  58. package/dist/{dictionary-update-checker-xIwF77-R.cjs.map → dictionary-update-checker-DmiIUoKw.cjs.map} +1 -1
  59. package/dist/{display-generator-vjbG05fn.js → display-generator-BAEJDrHT.js} +9 -7
  60. package/dist/display-generator-BAEJDrHT.js.map +1 -0
  61. package/dist/display-generator-D5fkD0JI.cjs +10 -0
  62. package/dist/display-generator-DZLMaVuP.js +10 -0
  63. package/dist/{display-generator-BhV_MOD1.cjs → display-generator-D_0chBzj.cjs} +9 -7
  64. package/dist/display-generator-D_0chBzj.cjs.map +1 -0
  65. package/dist/{errors-ZI2FcGUl.cjs → errors-0pIJI6N2.cjs} +1 -1
  66. package/dist/{errors-ZI2FcGUl.cjs.map → errors-0pIJI6N2.cjs.map} +1 -1
  67. package/dist/{errors-D2JfYV-C.js → errors-DvKlMRXC.js} +1 -1
  68. package/dist/{errors-D2JfYV-C.js.map → errors-DvKlMRXC.js.map} +1 -1
  69. package/dist/frequency-ranking-BXjfhhUQ.js +3 -0
  70. package/dist/{frequency-ranking-DmNIoxut.cjs → frequency-ranking-Cx1kkIrw.cjs} +1 -1
  71. package/dist/{frequency-ranking-DzbdZghE.js → frequency-ranking-DEJMTMdg.js} +1 -1
  72. package/dist/{frequency-ranking-DzbdZghE.js.map → frequency-ranking-DEJMTMdg.js.map} +1 -1
  73. package/dist/{frequency-ranking-Dm6xCMkY.cjs → frequency-ranking-DVYxTXN-.cjs} +1 -1
  74. package/dist/{frequency-ranking-Dm6xCMkY.cjs.map → frequency-ranking-DVYxTXN-.cjs.map} +1 -1
  75. package/dist/furigana-MU_j_m5i.cjs +5 -0
  76. package/dist/{furigana-BnY7-dJ-.cjs → furigana-SZuBaUyl.cjs} +2 -2
  77. package/dist/{furigana-BnY7-dJ-.cjs.map → furigana-SZuBaUyl.cjs.map} +1 -1
  78. package/dist/furigana-ZCs0Xs0b.js +5 -0
  79. package/dist/{furigana-CI6LUA-6.js → furigana-h18vaQ7a.js} +2 -2
  80. package/dist/{furigana-CI6LUA-6.js.map → furigana-h18vaQ7a.js.map} +1 -1
  81. package/dist/import.cjs +6 -6
  82. package/dist/import.d.ts +3 -3
  83. package/dist/import.js +6 -6
  84. package/dist/index.cjs +44 -18
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.d.cts +3 -3
  87. package/dist/index.d.cts.map +1 -1
  88. package/dist/index.d.ts +10 -10
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +44 -18
  91. package/dist/index.js.map +1 -1
  92. package/dist/{japanese-BVV1Ctk-.cjs → japanese-C83fmEfb.cjs} +1 -1
  93. package/dist/{japanese-BVV1Ctk-.cjs.map → japanese-C83fmEfb.cjs.map} +1 -1
  94. package/dist/{japanese-DhmmW35J.js → japanese-OKEGf_i4.js} +2 -2
  95. package/dist/{japanese-DhmmW35J.js.map → japanese-OKEGf_i4.js.map} +1 -1
  96. package/dist/{json-CyQBn52D.cjs → json-Cdj6aIOQ.cjs} +1 -1
  97. package/dist/{json-CyQBn52D.cjs.map → json-Cdj6aIOQ.cjs.map} +1 -1
  98. package/dist/{json-DTq_IXXF.js → json-rIgOFqVY.js} +1 -1
  99. package/dist/{json-DTq_IXXF.js.map → json-rIgOFqVY.js.map} +1 -1
  100. package/dist/{language-DFFp_7nc.d.ts → language-DMwuc2-C.d.ts} +1 -1
  101. package/dist/{language-DFFp_7nc.d.ts.map → language-DMwuc2-C.d.ts.map} +1 -1
  102. package/dist/language.cjs +12 -12
  103. package/dist/language.d.cts +41 -3
  104. package/dist/language.d.cts.map +1 -1
  105. package/dist/language.d.ts +44 -6
  106. package/dist/language.d.ts.map +1 -1
  107. package/dist/language.js +5 -5
  108. package/dist/lookup.cjs +7 -6
  109. package/dist/lookup.d.cts +5 -78
  110. package/dist/lookup.d.cts.map +1 -1
  111. package/dist/lookup.d.ts +8 -81
  112. package/dist/lookup.d.ts.map +1 -1
  113. package/dist/lookup.js +7 -6
  114. package/dist/{media-loader-CMEuD0fn.js → media-loader-C1WZVVaA.js} +1 -1
  115. package/dist/{media-loader-CMEuD0fn.js.map → media-loader-C1WZVVaA.js.map} +1 -1
  116. package/dist/media-loader-CWNb22gc.cjs +3 -0
  117. package/dist/media-loader-CrQnDnSp.js +3 -0
  118. package/dist/{media-loader-DS2ZXpSI.cjs → media-loader-RE32nGs3.cjs} +1 -1
  119. package/dist/{media-loader-DS2ZXpSI.cjs.map → media-loader-RE32nGs3.cjs.map} +1 -1
  120. package/dist/{multi-language-transformer-CjLO0S8V.d.ts → multi-language-transformer-CFu0CVWY.d.ts} +3 -3
  121. package/dist/{multi-language-transformer-CjLO0S8V.d.ts.map → multi-language-transformer-CFu0CVWY.d.ts.map} +1 -1
  122. package/dist/multi-language-transformer-Dk8S4W6j.js +12503 -0
  123. package/dist/multi-language-transformer-Dk8S4W6j.js.map +1 -0
  124. package/dist/{multi-language-transformer-B2133Zg_.cjs → multi-language-transformer-N66Mmb2E.cjs} +9614 -5
  125. package/dist/multi-language-transformer-N66Mmb2E.cjs.map +1 -0
  126. package/dist/{pronunciation-generator-cNtAQi5s.js → pronunciation-generator-BXcwS3By.js} +2 -2
  127. package/dist/{pronunciation-generator-cNtAQi5s.js.map → pronunciation-generator-BXcwS3By.js.map} +1 -1
  128. package/dist/{pronunciation-generator-CPwnr43z.cjs → pronunciation-generator-CP1kjYje.cjs} +1 -1
  129. package/dist/{pronunciation-generator-B8y__W7I.cjs → pronunciation-generator-CeC3LFPU.cjs} +1 -1
  130. package/dist/{pronunciation-generator-B8y__W7I.cjs.map → pronunciation-generator-CeC3LFPU.cjs.map} +1 -1
  131. package/dist/{pronunciation-generator-BvTbUlOy.js → pronunciation-generator-I1xpdJu0.js} +1 -1
  132. package/dist/render.cjs +96 -8
  133. package/dist/render.cjs.map +1 -1
  134. package/dist/render.d.cts +33 -3
  135. package/dist/render.d.cts.map +1 -1
  136. package/dist/render.d.ts +35 -5
  137. package/dist/render.d.ts.map +1 -1
  138. package/dist/render.js +95 -9
  139. package/dist/render.js.map +1 -1
  140. package/dist/{sentence-parser-DUQJ3cTT.cjs → sentence-parser-8i1Y_OGS.cjs} +74 -46
  141. package/dist/sentence-parser-8i1Y_OGS.cjs.map +1 -0
  142. package/dist/{translator-TiTDVbmS.d.cts → sentence-parser-BQpu2oSA.d.cts} +80 -4
  143. package/dist/sentence-parser-BQpu2oSA.d.cts.map +1 -0
  144. package/dist/{sentence-parser-sx7y6Oyh.js → sentence-parser-CXDs4R_c.js} +74 -46
  145. package/dist/sentence-parser-CXDs4R_c.js.map +1 -0
  146. package/dist/{translator-CYvGmODX.d.ts → sentence-parser-CmsHUc_p.d.ts} +81 -5
  147. package/dist/sentence-parser-CmsHUc_p.d.ts.map +1 -0
  148. package/dist/sentence-parser-DQccqSpq.cjs +6 -0
  149. package/dist/sentence-parser-DsleseSI.js +6 -0
  150. package/dist/structured-content-generator-BhEkwa0T.js +4 -0
  151. package/dist/{structured-content-generator-C5Hhaurz.cjs → structured-content-generator-CokLKgrb.cjs} +2 -2
  152. package/dist/{structured-content-generator-C5Hhaurz.cjs.map → structured-content-generator-CokLKgrb.cjs.map} +1 -1
  153. package/dist/{structured-content-generator-D48bLhPA.cjs → structured-content-generator-_z5dJECG.cjs} +2 -2
  154. package/dist/{structured-content-generator-aJieXElq.js → structured-content-generator-gnjtdBcC.js} +2 -2
  155. package/dist/{structured-content-generator-aJieXElq.js.map → structured-content-generator-gnjtdBcC.js.map} +1 -1
  156. package/dist/{text-utilities-CFDC9Bkr.cjs → text-utilities-CTsN1Bq8.cjs} +1 -1
  157. package/dist/{text-utilities-CFDC9Bkr.cjs.map → text-utilities-CTsN1Bq8.cjs.map} +1 -1
  158. package/dist/{text-utilities-D5eno9GK.js → text-utilities-DjLdStjv.js} +1 -1
  159. package/dist/{text-utilities-D5eno9GK.js.map → text-utilities-DjLdStjv.js.map} +1 -1
  160. package/dist/translator-BGI37WRC.js +7 -0
  161. package/dist/translator-Cd1ECBM1.cjs +7 -0
  162. package/dist/{translator-B1uTusjx.cjs → translator-ClzybVmi.cjs} +2 -2
  163. package/dist/{translator-B1uTusjx.cjs.map → translator-ClzybVmi.cjs.map} +1 -1
  164. package/dist/{translator-CrDE1UJW.js → translator-jFVzLjEs.js} +2 -2
  165. package/dist/{translator-CrDE1UJW.js.map → translator-jFVzLjEs.js.map} +1 -1
  166. package/package.json +1 -1
  167. package/dist/anki-connect-D-02BbHi.cjs +0 -6
  168. package/dist/anki-connect-Vn-cnxs8.js +0 -6
  169. package/dist/batch-processor-DItpL6Pp.js +0 -3
  170. package/dist/batch-processor-fiLvFS2_.cjs +0 -3
  171. package/dist/dictionary-importer-B9M3SD2y.js +0 -8
  172. package/dist/dictionary-importer-DnR8Bsai.cjs +0 -8
  173. package/dist/dictionary-update-checker-Cnjz4tQD.js +0 -4
  174. package/dist/display-generator-BhV_MOD1.cjs.map +0 -1
  175. package/dist/display-generator-Cn4vCiSI.js +0 -10
  176. package/dist/display-generator-G2e03o0R.cjs +0 -10
  177. package/dist/display-generator-vjbG05fn.js.map +0 -1
  178. package/dist/frequency-ranking-B-kvnxro.js +0 -3
  179. package/dist/furigana-cpPhFnBv.cjs +0 -5
  180. package/dist/furigana-kZjqnnFC.js +0 -5
  181. package/dist/japanese-DdsS8rT1.d.ts +0 -41
  182. package/dist/japanese-DdsS8rT1.d.ts.map +0 -1
  183. package/dist/japanese-DgmP3i76.d.cts +0 -41
  184. package/dist/japanese-DgmP3i76.d.cts.map +0 -1
  185. package/dist/media-loader-BBTESZXn.cjs +0 -3
  186. package/dist/media-loader-CNKoAjQs.js +0 -3
  187. package/dist/multi-language-transformer-B2133Zg_.cjs.map +0 -1
  188. package/dist/multi-language-transformer-BkwMTV2g.js +0 -2893
  189. package/dist/multi-language-transformer-BkwMTV2g.js.map +0 -1
  190. package/dist/sentence-parser-B-gM8mKk.js +0 -5
  191. package/dist/sentence-parser-Cp3cm_QU.cjs +0 -5
  192. package/dist/sentence-parser-DUQJ3cTT.cjs.map +0 -1
  193. package/dist/sentence-parser-sx7y6Oyh.js.map +0 -1
  194. package/dist/structured-content-generator-Dww8IT7Y.js +0 -4
  195. package/dist/translator-BiTHo9Nm.js +0 -7
  196. package/dist/translator-CYvGmODX.d.ts.map +0 -1
  197. package/dist/translator-TiTDVbmS.d.cts.map +0 -1
  198. package/dist/translator-Y7Haj_qJ.cjs +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"errors-ZI2FcGUl.cjs","names":["message: string","data?: unknown","value: unknown"],"sources":["../src/util/errors.ts"],"sourcesContent":["/**\n * Custom error class for yomitan-core which can contain extra data.\n */\nexport class YomitanError extends Error {\n public data: unknown;\n\n constructor(message: string, data?: unknown) {\n super(message);\n this.name = 'YomitanError';\n this.data = data;\n }\n}\n\n/**\n * Utility function to convert an unknown value to an error.\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(`${value}`);\n}\n"],"mappings":";;;;;;AAGA,IAAa,eAAb,cAAkC,MAAM;CACpC,AAAO;CAEP,YAAYA,SAAiBC,MAAgB;AACzC,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;CACf;AACJ;;;;AAKD,SAAgB,QAAQC,OAAuB;AAC3C,QAAO,iBAAiB,QAAQ,QAAQ,IAAI,OAAO,EAAE,MAAM;AAC9D"}
1
+ {"version":3,"file":"errors-0pIJI6N2.cjs","names":["message: string","data?: unknown","value: unknown"],"sources":["../src/util/errors.ts"],"sourcesContent":["/**\n * Custom error class for yomitan-core which can contain extra data.\n */\nexport class YomitanError extends Error {\n public data: unknown;\n\n constructor(message: string, data?: unknown) {\n super(message);\n this.name = 'YomitanError';\n this.data = data;\n }\n}\n\n/**\n * Utility function to convert an unknown value to an error.\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(`${value}`);\n}\n"],"mappings":";;;;;;AAGA,IAAa,eAAb,cAAkC,MAAM;CACpC,AAAO;CAEP,YAAYA,SAAiBC,MAAgB;AACzC,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;CACf;AACJ;;;;AAKD,SAAgB,QAAQC,OAAuB;AAC3C,QAAO,iBAAiB,QAAQ,QAAQ,IAAI,OAAO,EAAE,MAAM;AAC9D"}
@@ -19,4 +19,4 @@ function toError(value) {
19
19
 
20
20
  //#endregion
21
21
  export { YomitanError, toError };
22
- //# sourceMappingURL=errors-D2JfYV-C.js.map
22
+ //# sourceMappingURL=errors-DvKlMRXC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors-D2JfYV-C.js","names":["message: string","data?: unknown","value: unknown"],"sources":["../src/util/errors.ts"],"sourcesContent":["/**\n * Custom error class for yomitan-core which can contain extra data.\n */\nexport class YomitanError extends Error {\n public data: unknown;\n\n constructor(message: string, data?: unknown) {\n super(message);\n this.name = 'YomitanError';\n this.data = data;\n }\n}\n\n/**\n * Utility function to convert an unknown value to an error.\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(`${value}`);\n}\n"],"mappings":";;;;AAGA,IAAa,eAAb,cAAkC,MAAM;CACpC,AAAO;CAEP,YAAYA,SAAiBC,MAAgB;AACzC,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;CACf;AACJ;;;;AAKD,SAAgB,QAAQC,OAAuB;AAC3C,QAAO,iBAAiB,QAAQ,QAAQ,IAAI,OAAO,EAAE,MAAM;AAC9D"}
1
+ {"version":3,"file":"errors-DvKlMRXC.js","names":["message: string","data?: unknown","value: unknown"],"sources":["../src/util/errors.ts"],"sourcesContent":["/**\n * Custom error class for yomitan-core which can contain extra data.\n */\nexport class YomitanError extends Error {\n public data: unknown;\n\n constructor(message: string, data?: unknown) {\n super(message);\n this.name = 'YomitanError';\n this.data = data;\n }\n}\n\n/**\n * Utility function to convert an unknown value to an error.\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(`${value}`);\n}\n"],"mappings":";;;;AAGA,IAAa,eAAb,cAAkC,MAAM;CACpC,AAAO;CAEP,YAAYA,SAAiBC,MAAgB;AACzC,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,OAAO;CACf;AACJ;;;;AAKD,SAAgB,QAAQC,OAAuB;AAC3C,QAAO,iBAAiB,QAAQ,QAAQ,IAAI,OAAO,EAAE,MAAM;AAC9D"}
@@ -0,0 +1,3 @@
1
+ import { FrequencyRanker } from "./frequency-ranking-DEJMTMdg.js";
2
+
3
+ export { FrequencyRanker };
@@ -1,3 +1,3 @@
1
- const require_frequency_ranking = require('./frequency-ranking-Dm6xCMkY.cjs');
1
+ const require_frequency_ranking = require('./frequency-ranking-DVYxTXN-.cjs');
2
2
 
3
3
  exports.FrequencyRanker = require_frequency_ranking.FrequencyRanker
@@ -156,4 +156,4 @@ var FrequencyRanker = class {
156
156
 
157
157
  //#endregion
158
158
  export { FrequencyRanker };
159
- //# sourceMappingURL=frequency-ranking-DzbdZghE.js.map
159
+ //# sourceMappingURL=frequency-ranking-DEJMTMdg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frequency-ranking-DzbdZghE.js","names":["db: DictionaryDB","term: string","dictionaries: string[]","reading?: string","frequencies: { dictionary: string; frequency: number; displayValue: string | null }[]","terms: string[]","values: number[]","frequency: DictionaryData.GenericFrequencyData","displayValue: string | null","value: string"],"sources":["../src/lookup/frequency-ranking.ts"],"sourcesContent":["/*\n * Copyright (C) 2023-2025 Yomitan Authors\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport type { DictionaryDB } from '../database/dictionary-database';\nimport type * as DictionaryData from '../types/dictionary-data';\nimport type * as DictionaryDatabase from '../types/dictionary-database';\n\nexport interface FrequencyRanking {\n /** Per-dictionary frequency data. */\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n /** The harmonic mean across all dictionaries with positive frequency. */\n harmonicMean: number;\n}\n\n/**\n * Queries term frequency metadata from the database and computes\n * aggregate frequency rankings across multiple dictionaries.\n */\nexport class FrequencyRanker {\n private _db: DictionaryDB;\n private _numberRegex: RegExp;\n\n constructor(db: DictionaryDB) {\n this._db = db;\n this._numberRegex = /[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/;\n }\n\n /**\n * Gets the frequency ranking for a term across all dictionaries that\n * have frequency metadata for it.\n *\n * @param term The term to look up.\n * @param dictionaries The set of dictionary names to query.\n * @param reading Optional reading to filter frequency data. If not provided,\n * all frequency entries for the term are included.\n * @returns A FrequencyRanking object with per-dictionary frequencies and a harmonic mean.\n */\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRanking> {\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk([term], dictionarySet);\n\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of metas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n\n if (hasReading) {\n const dataWithReading = data as DictionaryData.TermMetaFrequencyDataWithReading;\n if (typeof reading === 'string' && dataWithReading.reading !== reading) {\n continue;\n }\n const { frequency, displayValue } = this._getFrequencyInfo(dataWithReading.frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n } else {\n const { frequency, displayValue } = this._getFrequencyInfo(data as DictionaryData.GenericFrequencyData);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n\n return { frequencies, harmonicMean };\n }\n\n /**\n * Gets frequency rankings for multiple terms at once.\n */\n async getFrequencyRankingBulk(terms: string[], dictionaries: string[]): Promise<Map<string, FrequencyRanking>> {\n const results = new Map<string, FrequencyRanking>();\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk(terms, dictionarySet);\n\n // Group by term\n const termMetaMap = new Map<string, DictionaryDatabase.TermMeta[]>();\n for (const meta of metas) {\n const term = terms[meta.index];\n let termMetas = termMetaMap.get(term);\n if (typeof termMetas === 'undefined') {\n termMetas = [];\n termMetaMap.set(term, termMetas);\n }\n termMetas.push(meta);\n }\n\n for (const [term, termMetas] of termMetaMap.entries()) {\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of termMetas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n const frequency = hasReading\n ? (data as DictionaryData.TermMetaFrequencyDataWithReading).frequency\n : (data as DictionaryData.GenericFrequencyData);\n\n const { frequency: freqValue, displayValue } = this._getFrequencyInfo(frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || freqValue < existing.frequency) {\n frequencyMap.set(dictionary, { frequency: freqValue, displayValue });\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n results.set(term, { frequencies, harmonicMean });\n }\n\n return results;\n }\n\n /**\n * Computes the harmonic mean of positive frequency values.\n */\n private _computeHarmonicMean(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n let sum = 0;\n let count = 0;\n for (const freq of values) {\n if (freq <= 0) {\n continue;\n }\n sum += 1 / freq;\n count++;\n }\n return sum > 0 ? Math.round(count / sum) : 0;\n }\n\n /**\n * Extracts numeric frequency value and display string from generic frequency data.\n */\n private _getFrequencyInfo(frequency: DictionaryData.GenericFrequencyData): {\n frequency: number;\n displayValue: string | null;\n } {\n let frequencyValue = 0;\n let displayValue: string | null = null;\n if (typeof frequency === 'object' && frequency !== null) {\n const { value: frequencyValue2, displayValue: displayValue2 } = frequency;\n if (typeof frequencyValue2 === 'number') {\n frequencyValue = frequencyValue2;\n }\n if (typeof displayValue2 === 'string') {\n displayValue = displayValue2;\n }\n } else {\n switch (typeof frequency) {\n case 'number':\n frequencyValue = frequency;\n break;\n case 'string':\n displayValue = frequency;\n frequencyValue = this._convertStringToNumber(frequency);\n break;\n }\n }\n return { frequency: frequencyValue, displayValue };\n }\n\n /**\n * Converts a string to a number by extracting the first numeric value.\n */\n private _convertStringToNumber(value: string): number {\n const match = this._numberRegex.exec(value);\n if (match === null) {\n return 0;\n }\n const result = Number.parseFloat(match[0]);\n return Number.isFinite(result) ? result : 0;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"frequency-ranking-DEJMTMdg.js","names":["db: DictionaryDB","term: string","dictionaries: string[]","reading?: string","frequencies: { dictionary: string; frequency: number; displayValue: string | null }[]","terms: string[]","values: number[]","frequency: DictionaryData.GenericFrequencyData","displayValue: string | null","value: string"],"sources":["../src/lookup/frequency-ranking.ts"],"sourcesContent":["/*\n * Copyright (C) 2023-2025 Yomitan Authors\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport type { DictionaryDB } from '../database/dictionary-database';\nimport type * as DictionaryData from '../types/dictionary-data';\nimport type * as DictionaryDatabase from '../types/dictionary-database';\n\nexport interface FrequencyRanking {\n /** Per-dictionary frequency data. */\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n /** The harmonic mean across all dictionaries with positive frequency. */\n harmonicMean: number;\n}\n\n/**\n * Queries term frequency metadata from the database and computes\n * aggregate frequency rankings across multiple dictionaries.\n */\nexport class FrequencyRanker {\n private _db: DictionaryDB;\n private _numberRegex: RegExp;\n\n constructor(db: DictionaryDB) {\n this._db = db;\n this._numberRegex = /[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/;\n }\n\n /**\n * Gets the frequency ranking for a term across all dictionaries that\n * have frequency metadata for it.\n *\n * @param term The term to look up.\n * @param dictionaries The set of dictionary names to query.\n * @param reading Optional reading to filter frequency data. If not provided,\n * all frequency entries for the term are included.\n * @returns A FrequencyRanking object with per-dictionary frequencies and a harmonic mean.\n */\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRanking> {\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk([term], dictionarySet);\n\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of metas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n\n if (hasReading) {\n const dataWithReading = data as DictionaryData.TermMetaFrequencyDataWithReading;\n if (typeof reading === 'string' && dataWithReading.reading !== reading) {\n continue;\n }\n const { frequency, displayValue } = this._getFrequencyInfo(dataWithReading.frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n } else {\n const { frequency, displayValue } = this._getFrequencyInfo(data as DictionaryData.GenericFrequencyData);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n\n return { frequencies, harmonicMean };\n }\n\n /**\n * Gets frequency rankings for multiple terms at once.\n */\n async getFrequencyRankingBulk(terms: string[], dictionaries: string[]): Promise<Map<string, FrequencyRanking>> {\n const results = new Map<string, FrequencyRanking>();\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk(terms, dictionarySet);\n\n // Group by term\n const termMetaMap = new Map<string, DictionaryDatabase.TermMeta[]>();\n for (const meta of metas) {\n const term = terms[meta.index];\n let termMetas = termMetaMap.get(term);\n if (typeof termMetas === 'undefined') {\n termMetas = [];\n termMetaMap.set(term, termMetas);\n }\n termMetas.push(meta);\n }\n\n for (const [term, termMetas] of termMetaMap.entries()) {\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of termMetas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n const frequency = hasReading\n ? (data as DictionaryData.TermMetaFrequencyDataWithReading).frequency\n : (data as DictionaryData.GenericFrequencyData);\n\n const { frequency: freqValue, displayValue } = this._getFrequencyInfo(frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || freqValue < existing.frequency) {\n frequencyMap.set(dictionary, { frequency: freqValue, displayValue });\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n results.set(term, { frequencies, harmonicMean });\n }\n\n return results;\n }\n\n /**\n * Computes the harmonic mean of positive frequency values.\n */\n private _computeHarmonicMean(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n let sum = 0;\n let count = 0;\n for (const freq of values) {\n if (freq <= 0) {\n continue;\n }\n sum += 1 / freq;\n count++;\n }\n return sum > 0 ? Math.round(count / sum) : 0;\n }\n\n /**\n * Extracts numeric frequency value and display string from generic frequency data.\n */\n private _getFrequencyInfo(frequency: DictionaryData.GenericFrequencyData): {\n frequency: number;\n displayValue: string | null;\n } {\n let frequencyValue = 0;\n let displayValue: string | null = null;\n if (typeof frequency === 'object' && frequency !== null) {\n const { value: frequencyValue2, displayValue: displayValue2 } = frequency;\n if (typeof frequencyValue2 === 'number') {\n frequencyValue = frequencyValue2;\n }\n if (typeof displayValue2 === 'string') {\n displayValue = displayValue2;\n }\n } else {\n switch (typeof frequency) {\n case 'number':\n frequencyValue = frequency;\n break;\n case 'string':\n displayValue = frequency;\n frequencyValue = this._convertStringToNumber(frequency);\n break;\n }\n }\n return { frequency: frequencyValue, displayValue };\n }\n\n /**\n * Converts a string to a number by extracting the first numeric value.\n */\n private _convertStringToNumber(value: string): number {\n const match = this._numberRegex.exec(value);\n if (match === null) {\n return 0;\n }\n const result = Number.parseFloat(match[0]);\n return Number.isFinite(result) ? result : 0;\n }\n}\n"],"mappings":"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"}
@@ -163,4 +163,4 @@ Object.defineProperty(exports, 'FrequencyRanker', {
163
163
  return FrequencyRanker;
164
164
  }
165
165
  });
166
- //# sourceMappingURL=frequency-ranking-Dm6xCMkY.cjs.map
166
+ //# sourceMappingURL=frequency-ranking-DVYxTXN-.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"frequency-ranking-Dm6xCMkY.cjs","names":["db: DictionaryDB","term: string","dictionaries: string[]","reading?: string","frequencies: { dictionary: string; frequency: number; displayValue: string | null }[]","terms: string[]","values: number[]","frequency: DictionaryData.GenericFrequencyData","displayValue: string | null","value: string"],"sources":["../src/lookup/frequency-ranking.ts"],"sourcesContent":["/*\n * Copyright (C) 2023-2025 Yomitan Authors\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport type { DictionaryDB } from '../database/dictionary-database';\nimport type * as DictionaryData from '../types/dictionary-data';\nimport type * as DictionaryDatabase from '../types/dictionary-database';\n\nexport interface FrequencyRanking {\n /** Per-dictionary frequency data. */\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n /** The harmonic mean across all dictionaries with positive frequency. */\n harmonicMean: number;\n}\n\n/**\n * Queries term frequency metadata from the database and computes\n * aggregate frequency rankings across multiple dictionaries.\n */\nexport class FrequencyRanker {\n private _db: DictionaryDB;\n private _numberRegex: RegExp;\n\n constructor(db: DictionaryDB) {\n this._db = db;\n this._numberRegex = /[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/;\n }\n\n /**\n * Gets the frequency ranking for a term across all dictionaries that\n * have frequency metadata for it.\n *\n * @param term The term to look up.\n * @param dictionaries The set of dictionary names to query.\n * @param reading Optional reading to filter frequency data. If not provided,\n * all frequency entries for the term are included.\n * @returns A FrequencyRanking object with per-dictionary frequencies and a harmonic mean.\n */\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRanking> {\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk([term], dictionarySet);\n\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of metas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n\n if (hasReading) {\n const dataWithReading = data as DictionaryData.TermMetaFrequencyDataWithReading;\n if (typeof reading === 'string' && dataWithReading.reading !== reading) {\n continue;\n }\n const { frequency, displayValue } = this._getFrequencyInfo(dataWithReading.frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n } else {\n const { frequency, displayValue } = this._getFrequencyInfo(data as DictionaryData.GenericFrequencyData);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n\n return { frequencies, harmonicMean };\n }\n\n /**\n * Gets frequency rankings for multiple terms at once.\n */\n async getFrequencyRankingBulk(terms: string[], dictionaries: string[]): Promise<Map<string, FrequencyRanking>> {\n const results = new Map<string, FrequencyRanking>();\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk(terms, dictionarySet);\n\n // Group by term\n const termMetaMap = new Map<string, DictionaryDatabase.TermMeta[]>();\n for (const meta of metas) {\n const term = terms[meta.index];\n let termMetas = termMetaMap.get(term);\n if (typeof termMetas === 'undefined') {\n termMetas = [];\n termMetaMap.set(term, termMetas);\n }\n termMetas.push(meta);\n }\n\n for (const [term, termMetas] of termMetaMap.entries()) {\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of termMetas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n const frequency = hasReading\n ? (data as DictionaryData.TermMetaFrequencyDataWithReading).frequency\n : (data as DictionaryData.GenericFrequencyData);\n\n const { frequency: freqValue, displayValue } = this._getFrequencyInfo(frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || freqValue < existing.frequency) {\n frequencyMap.set(dictionary, { frequency: freqValue, displayValue });\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n results.set(term, { frequencies, harmonicMean });\n }\n\n return results;\n }\n\n /**\n * Computes the harmonic mean of positive frequency values.\n */\n private _computeHarmonicMean(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n let sum = 0;\n let count = 0;\n for (const freq of values) {\n if (freq <= 0) {\n continue;\n }\n sum += 1 / freq;\n count++;\n }\n return sum > 0 ? Math.round(count / sum) : 0;\n }\n\n /**\n * Extracts numeric frequency value and display string from generic frequency data.\n */\n private _getFrequencyInfo(frequency: DictionaryData.GenericFrequencyData): {\n frequency: number;\n displayValue: string | null;\n } {\n let frequencyValue = 0;\n let displayValue: string | null = null;\n if (typeof frequency === 'object' && frequency !== null) {\n const { value: frequencyValue2, displayValue: displayValue2 } = frequency;\n if (typeof frequencyValue2 === 'number') {\n frequencyValue = frequencyValue2;\n }\n if (typeof displayValue2 === 'string') {\n displayValue = displayValue2;\n }\n } else {\n switch (typeof frequency) {\n case 'number':\n frequencyValue = frequency;\n break;\n case 'string':\n displayValue = frequency;\n frequencyValue = this._convertStringToNumber(frequency);\n break;\n }\n }\n return { frequency: frequencyValue, displayValue };\n }\n\n /**\n * Converts a string to a number by extracting the first numeric value.\n */\n private _convertStringToNumber(value: string): number {\n const match = this._numberRegex.exec(value);\n if (match === null) {\n return 0;\n }\n const result = Number.parseFloat(match[0]);\n return Number.isFinite(result) ? result : 0;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"frequency-ranking-DVYxTXN-.cjs","names":["db: DictionaryDB","term: string","dictionaries: string[]","reading?: string","frequencies: { dictionary: string; frequency: number; displayValue: string | null }[]","terms: string[]","values: number[]","frequency: DictionaryData.GenericFrequencyData","displayValue: string | null","value: string"],"sources":["../src/lookup/frequency-ranking.ts"],"sourcesContent":["/*\n * Copyright (C) 2023-2025 Yomitan Authors\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n\nimport type { DictionaryDB } from '../database/dictionary-database';\nimport type * as DictionaryData from '../types/dictionary-data';\nimport type * as DictionaryDatabase from '../types/dictionary-database';\n\nexport interface FrequencyRanking {\n /** Per-dictionary frequency data. */\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n /** The harmonic mean across all dictionaries with positive frequency. */\n harmonicMean: number;\n}\n\n/**\n * Queries term frequency metadata from the database and computes\n * aggregate frequency rankings across multiple dictionaries.\n */\nexport class FrequencyRanker {\n private _db: DictionaryDB;\n private _numberRegex: RegExp;\n\n constructor(db: DictionaryDB) {\n this._db = db;\n this._numberRegex = /[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?/;\n }\n\n /**\n * Gets the frequency ranking for a term across all dictionaries that\n * have frequency metadata for it.\n *\n * @param term The term to look up.\n * @param dictionaries The set of dictionary names to query.\n * @param reading Optional reading to filter frequency data. If not provided,\n * all frequency entries for the term are included.\n * @returns A FrequencyRanking object with per-dictionary frequencies and a harmonic mean.\n */\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRanking> {\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk([term], dictionarySet);\n\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of metas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n\n if (hasReading) {\n const dataWithReading = data as DictionaryData.TermMetaFrequencyDataWithReading;\n if (typeof reading === 'string' && dataWithReading.reading !== reading) {\n continue;\n }\n const { frequency, displayValue } = this._getFrequencyInfo(dataWithReading.frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n } else {\n const { frequency, displayValue } = this._getFrequencyInfo(data as DictionaryData.GenericFrequencyData);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || frequency < existing.frequency) {\n frequencyMap.set(dictionary, { frequency, displayValue });\n }\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n\n return { frequencies, harmonicMean };\n }\n\n /**\n * Gets frequency rankings for multiple terms at once.\n */\n async getFrequencyRankingBulk(terms: string[], dictionaries: string[]): Promise<Map<string, FrequencyRanking>> {\n const results = new Map<string, FrequencyRanking>();\n const dictionarySet = new Set(dictionaries);\n const metas = await this._db.findTermMetaBulk(terms, dictionarySet);\n\n // Group by term\n const termMetaMap = new Map<string, DictionaryDatabase.TermMeta[]>();\n for (const meta of metas) {\n const term = terms[meta.index];\n let termMetas = termMetaMap.get(term);\n if (typeof termMetas === 'undefined') {\n termMetas = [];\n termMetaMap.set(term, termMetas);\n }\n termMetas.push(meta);\n }\n\n for (const [term, termMetas] of termMetaMap.entries()) {\n const frequencyMap = new Map<string, { frequency: number; displayValue: string | null }>();\n\n for (const meta of termMetas) {\n if (meta.mode !== 'freq') {\n continue;\n }\n\n const freqMeta = meta as DictionaryDatabase.TermMetaFrequency;\n const { data, dictionary } = freqMeta;\n\n const hasReading =\n data !== null &&\n typeof data === 'object' &&\n typeof (data as DictionaryData.TermMetaFrequencyDataWithReading).reading === 'string';\n const frequency = hasReading\n ? (data as DictionaryData.TermMetaFrequencyDataWithReading).frequency\n : (data as DictionaryData.GenericFrequencyData);\n\n const { frequency: freqValue, displayValue } = this._getFrequencyInfo(frequency);\n const existing = frequencyMap.get(dictionary);\n if (typeof existing === 'undefined' || freqValue < existing.frequency) {\n frequencyMap.set(dictionary, { frequency: freqValue, displayValue });\n }\n }\n\n const frequencies: { dictionary: string; frequency: number; displayValue: string | null }[] = [];\n for (const [dictionary, { frequency, displayValue }] of frequencyMap.entries()) {\n frequencies.push({ dictionary, frequency, displayValue });\n }\n\n const harmonicMean = this._computeHarmonicMean(frequencies.map((f) => f.frequency));\n results.set(term, { frequencies, harmonicMean });\n }\n\n return results;\n }\n\n /**\n * Computes the harmonic mean of positive frequency values.\n */\n private _computeHarmonicMean(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n let sum = 0;\n let count = 0;\n for (const freq of values) {\n if (freq <= 0) {\n continue;\n }\n sum += 1 / freq;\n count++;\n }\n return sum > 0 ? Math.round(count / sum) : 0;\n }\n\n /**\n * Extracts numeric frequency value and display string from generic frequency data.\n */\n private _getFrequencyInfo(frequency: DictionaryData.GenericFrequencyData): {\n frequency: number;\n displayValue: string | null;\n } {\n let frequencyValue = 0;\n let displayValue: string | null = null;\n if (typeof frequency === 'object' && frequency !== null) {\n const { value: frequencyValue2, displayValue: displayValue2 } = frequency;\n if (typeof frequencyValue2 === 'number') {\n frequencyValue = frequencyValue2;\n }\n if (typeof displayValue2 === 'string') {\n displayValue = displayValue2;\n }\n } else {\n switch (typeof frequency) {\n case 'number':\n frequencyValue = frequency;\n break;\n case 'string':\n displayValue = frequency;\n frequencyValue = this._convertStringToNumber(frequency);\n break;\n }\n }\n return { frequency: frequencyValue, displayValue };\n }\n\n /**\n * Converts a string to a number by extracting the first numeric value.\n */\n private _convertStringToNumber(value: string): number {\n const match = this._numberRegex.exec(value);\n if (match === null) {\n return 0;\n }\n const result = Number.parseFloat(match[0]);\n return Number.isFinite(result) ? result : 0;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ require('./cjk-util-Dp0ZU0sh.cjs');
2
+ const require_japanese = require('./japanese-C83fmEfb.cjs');
3
+ const require_furigana = require('./furigana-SZuBaUyl.cjs');
4
+
5
+ exports.generateFurigana = require_furigana.generateFurigana
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- const require_japanese = require('./japanese-BVV1Ctk-.cjs');
2
+ const require_japanese = require('./japanese-C83fmEfb.cjs');
3
3
 
4
4
  //#region src/language/ja/furigana.ts
5
5
  function generateFurigana(text, reading) {
@@ -13,4 +13,4 @@ Object.defineProperty(exports, 'generateFurigana', {
13
13
  return generateFurigana;
14
14
  }
15
15
  });
16
- //# sourceMappingURL=furigana-BnY7-dJ-.cjs.map
16
+ //# sourceMappingURL=furigana-SZuBaUyl.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"furigana-BnY7-dJ-.cjs","names":["text: string","reading: string"],"sources":["../src/language/ja/furigana.ts"],"sourcesContent":["export type { FuriganaSegment } from './japanese';\nexport { distributeFurigana, distributeFuriganaInflected } from './japanese';\n\nimport { distributeFurigana } from './japanese';\nimport type { FuriganaSegment } from './japanese';\n\nexport function generateFurigana(text: string, reading: string): FuriganaSegment[] {\n return distributeFurigana(text, reading);\n}\n"],"mappings":";;;;AAMA,SAAgB,iBAAiBA,MAAcC,SAAoC;AAC/E,QAAO,oCAAmB,MAAM,QAAQ;AAC3C"}
1
+ {"version":3,"file":"furigana-SZuBaUyl.cjs","names":["text: string","reading: string"],"sources":["../src/language/ja/furigana.ts"],"sourcesContent":["export type { FuriganaSegment } from './japanese';\nexport { distributeFurigana, distributeFuriganaInflected } from './japanese';\n\nimport { distributeFurigana } from './japanese';\nimport type { FuriganaSegment } from './japanese';\n\nexport function generateFurigana(text: string, reading: string): FuriganaSegment[] {\n return distributeFurigana(text, reading);\n}\n"],"mappings":";;;;AAMA,SAAgB,iBAAiBA,MAAcC,SAAoC;AAC/E,QAAO,oCAAmB,MAAM,QAAQ;AAC3C"}
@@ -0,0 +1,5 @@
1
+ import "./cjk-util-DubXBGDG.js";
2
+ import { distributeFurigana, distributeFuriganaInflected } from "./japanese-OKEGf_i4.js";
3
+ import { generateFurigana } from "./furigana-h18vaQ7a.js";
4
+
5
+ export { generateFurigana };
@@ -1,4 +1,4 @@
1
- import { distributeFurigana } from "./japanese-DhmmW35J.js";
1
+ import { distributeFurigana } from "./japanese-OKEGf_i4.js";
2
2
 
3
3
  //#region src/language/ja/furigana.ts
4
4
  function generateFurigana(text, reading) {
@@ -7,4 +7,4 @@ function generateFurigana(text, reading) {
7
7
 
8
8
  //#endregion
9
9
  export { generateFurigana };
10
- //# sourceMappingURL=furigana-CI6LUA-6.js.map
10
+ //# sourceMappingURL=furigana-h18vaQ7a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"furigana-CI6LUA-6.js","names":["text: string","reading: string"],"sources":["../src/language/ja/furigana.ts"],"sourcesContent":["export type { FuriganaSegment } from './japanese';\nexport { distributeFurigana, distributeFuriganaInflected } from './japanese';\n\nimport { distributeFurigana } from './japanese';\nimport type { FuriganaSegment } from './japanese';\n\nexport function generateFurigana(text: string, reading: string): FuriganaSegment[] {\n return distributeFurigana(text, reading);\n}\n"],"mappings":";;;AAMA,SAAgB,iBAAiBA,MAAcC,SAAoC;AAC/E,QAAO,mBAAmB,MAAM,QAAQ;AAC3C"}
1
+ {"version":3,"file":"furigana-h18vaQ7a.js","names":["text: string","reading: string"],"sources":["../src/language/ja/furigana.ts"],"sourcesContent":["export type { FuriganaSegment } from './japanese';\nexport { distributeFurigana, distributeFuriganaInflected } from './japanese';\n\nimport { distributeFurigana } from './japanese';\nimport type { FuriganaSegment } from './japanese';\n\nexport function generateFurigana(text: string, reading: string): FuriganaSegment[] {\n return distributeFurigana(text, reading);\n}\n"],"mappings":";;;AAMA,SAAgB,iBAAiBA,MAAcC,SAAoC;AAC/E,QAAO,mBAAmB,MAAM,QAAQ;AAC3C"}
package/dist/import.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  require('./utilities-C-lbZaJE.cjs');
2
- require('./errors-ZI2FcGUl.cjs');
3
- require('./dictionary-data-util-BY_72f3u.cjs');
4
- require('./json-CyQBn52D.cjs');
5
- const require_dictionary_importer = require('./dictionary-importer-CbMwsqEX.cjs');
6
- const require_media_loader = require('./media-loader-DS2ZXpSI.cjs');
7
- const require_dictionary_update_checker = require('./dictionary-update-checker-xIwF77-R.cjs');
2
+ require('./errors-0pIJI6N2.cjs');
3
+ require('./dictionary-data-util-DmLJMtGc.cjs');
4
+ require('./json-Cdj6aIOQ.cjs');
5
+ const require_dictionary_importer = require('./dictionary-importer-BvgP1Fs9.cjs');
6
+ const require_media_loader = require('./media-loader-RE32nGs3.cjs');
7
+ const require_dictionary_update_checker = require('./dictionary-update-checker-DmiIUoKw.cjs');
8
8
 
9
9
  exports.DictionaryImporterClass = require_dictionary_importer.DictionaryImporterClass
10
10
  exports.DictionaryUpdateChecker = require_dictionary_update_checker.DictionaryUpdateChecker
package/dist/import.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import "./dictionary-CfzEFbXZ.js";
2
- import { CompiledSchemaValidators, ImportDetails, ImportResult, OnProgressCallback } from "./dictionary-importer-C-AlWsIN.js";
3
- import { DictionaryDB$1 as DictionaryDB } from "./dictionary-database-BRAqOF_M.js";
1
+ import "./dictionary-DdxghSJP.js";
2
+ import { CompiledSchemaValidators, ImportDetails, ImportResult, OnProgressCallback } from "./dictionary-importer-CDbCAbwG.js";
3
+ import { DictionaryDB$1 as DictionaryDB } from "./dictionary-database-D0lvK2n3.js";
4
4
 
5
5
  //#region src/import/media-loader.d.ts
6
6
  interface MediaLoader {
package/dist/import.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import "./utilities-bi3EF-q5.js";
2
- import "./errors-D2JfYV-C.js";
3
- import "./dictionary-data-util-CKDT7n2t.js";
4
- import "./json-DTq_IXXF.js";
5
- import { DictionaryImporterClass, getSchemaValidators } from "./dictionary-importer-C7mNL5CJ.js";
6
- import { NoOpMediaLoader } from "./media-loader-CMEuD0fn.js";
7
- import { DictionaryUpdateChecker } from "./dictionary-update-checker-DE2ymYcs.js";
2
+ import "./errors-DvKlMRXC.js";
3
+ import "./dictionary-data-util-gUUD9ElK.js";
4
+ import "./json-rIgOFqVY.js";
5
+ import { DictionaryImporterClass, getSchemaValidators } from "./dictionary-importer-BPlLeF5R.js";
6
+ import { NoOpMediaLoader } from "./media-loader-C1WZVVaA.js";
7
+ import { DictionaryUpdateChecker } from "./dictionary-update-checker-CLbtQ48X.js";
8
8
 
9
9
  export { DictionaryImporterClass, DictionaryUpdateChecker, NoOpMediaLoader, getSchemaValidators };
package/dist/index.cjs CHANGED
@@ -4,9 +4,10 @@ const require_log = require('./log-D8KtR3aP.cjs');
4
4
  require('./utilities-C-lbZaJE.cjs');
5
5
  const require_dictionary_database = require('./dictionary-database-lvFvftnO.cjs');
6
6
  require('./cjk-util-Dp0ZU0sh.cjs');
7
- require('./japanese-BVV1Ctk-.cjs');
8
- const require_multi_language_transformer = require('./multi-language-transformer-B2133Zg_.cjs');
9
- const require_errors = require('./errors-ZI2FcGUl.cjs');
7
+ const require_multi_language_transformer = require('./multi-language-transformer-N66Mmb2E.cjs');
8
+ require('./japanese-C83fmEfb.cjs');
9
+ const require_debug = require('./debug-I2dyAd2e.cjs');
10
+ const require_errors = require('./errors-0pIJI6N2.cjs');
10
11
 
11
12
  //#region src/util/event-dispatcher.ts
12
13
  /**
@@ -93,7 +94,7 @@ var YomitanCore = class {
93
94
  this._ensureInitialized();
94
95
  if (!this._translator) {
95
96
  const { Translator } = await Promise.resolve().then(function() {
96
- return require("./translator-Y7Haj_qJ.cjs");
97
+ return require("./translator-Cd1ECBM1.cjs");
97
98
  });
98
99
  this._translator = new Translator(this._db);
99
100
  this._translator.prepare();
@@ -111,10 +112,10 @@ var YomitanCore = class {
111
112
  async importDictionary(archive, options) {
112
113
  this._ensureInitialized();
113
114
  const { DictionaryImporterClass: DictionaryImporter } = await Promise.resolve().then(function() {
114
- return require("./dictionary-importer-DnR8Bsai.cjs");
115
+ return require("./dictionary-importer-Luz6usUQ.cjs");
115
116
  });
116
117
  const { NoOpMediaLoader } = await Promise.resolve().then(function() {
117
- return require("./media-loader-BBTESZXn.cjs");
118
+ return require("./media-loader-CWNb22gc.cjs");
118
119
  });
119
120
  const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);
120
121
  const details = {
@@ -166,14 +167,26 @@ var YomitanCore = class {
166
167
  }
167
168
  async parseText(text, options) {
168
169
  this._ensureInitialized();
170
+ require_debug.debugYomitanCore("index", "parseText:start", {
171
+ textLength: text.length,
172
+ textPreview: text.slice(0, 120),
173
+ textCodePoints: require_debug.codePointPreview(text),
174
+ language: options.language ?? "ja",
175
+ enabledDictionaryCount: options.enabledDictionaryMap.size,
176
+ enabledDictionaryNames: [...options.enabledDictionaryMap.keys()],
177
+ scanLength: options.scanLength ?? options.maxLength ?? 20,
178
+ searchResolution: options.searchResolution ?? "letter",
179
+ removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,
180
+ deinflect: options.deinflect
181
+ });
169
182
  if (!this._sentenceParser) {
170
183
  const translator = await this.getTranslator();
171
184
  const { SentenceParser } = await Promise.resolve().then(function() {
172
- return require("./sentence-parser-Cp3cm_QU.cjs");
185
+ return require("./sentence-parser-DQccqSpq.cjs");
173
186
  });
174
187
  this._sentenceParser = new SentenceParser(translator);
175
188
  }
176
- return await this._sentenceParser.parseText(text, options.language ?? "ja", {
189
+ const parsedLines = await this._sentenceParser.parseText(text, options.language ?? "ja", {
177
190
  enabledDictionaryMap: options.enabledDictionaryMap,
178
191
  scanLength: options.scanLength,
179
192
  maxLength: options.maxLength,
@@ -182,10 +195,23 @@ var YomitanCore = class {
182
195
  deinflect: options.deinflect,
183
196
  textReplacements: options.textReplacements
184
197
  });
198
+ require_debug.debugYomitanCore("index", "parseText:complete", {
199
+ parseLineCount: parsedLines.length,
200
+ segmentCount: parsedLines.reduce((count, line) => count + line.length, 0),
201
+ lineSegmentCounts: parsedLines.map((line) => line.length),
202
+ selectableSegmentCount: parsedLines.reduce((count, line) => count + line.filter((segment) => Array.isArray(segment.headwords)).length, 0)
203
+ });
204
+ return [{
205
+ id: "scan",
206
+ source: "scanning-parser",
207
+ dictionary: null,
208
+ index: 0,
209
+ content: parsedLines
210
+ }];
185
211
  }
186
212
  async generateFurigana(text, reading) {
187
213
  const { generateFurigana } = await Promise.resolve().then(function() {
188
- return require("./furigana-cpPhFnBv.cjs");
214
+ return require("./furigana-MU_j_m5i.cjs");
189
215
  });
190
216
  return generateFurigana(text, reading);
191
217
  }
@@ -194,7 +220,7 @@ var YomitanCore = class {
194
220
  if (!this._batchProcessor) {
195
221
  const translator = await this.getTranslator();
196
222
  const { BatchProcessor } = await Promise.resolve().then(function() {
197
- return require("./batch-processor-fiLvFS2_.cjs");
223
+ return require("./batch-processor-CSF1acTw.cjs");
198
224
  });
199
225
  this._batchProcessor = new BatchProcessor(translator);
200
226
  }
@@ -214,7 +240,7 @@ var YomitanCore = class {
214
240
  this._ensureInitialized();
215
241
  if (!this._frequencyRanker) {
216
242
  const { FrequencyRanker } = await Promise.resolve().then(function() {
217
- return require("./frequency-ranking-DmNIoxut.cjs");
243
+ return require("./frequency-ranking-Cx1kkIrw.cjs");
218
244
  });
219
245
  this._frequencyRanker = new FrequencyRanker(this._db);
220
246
  }
@@ -223,33 +249,33 @@ var YomitanCore = class {
223
249
  async checkForUpdates(names) {
224
250
  this._ensureInitialized();
225
251
  const { DictionaryUpdateChecker } = await Promise.resolve().then(function() {
226
- return require("./dictionary-update-checker-CU3q0aoP.cjs");
252
+ return require("./dictionary-update-checker-DgjPsURI.cjs");
227
253
  });
228
254
  const checker = new DictionaryUpdateChecker(this._db);
229
255
  return await checker.checkForUpdates(names);
230
256
  }
231
257
  async getAudioUrls(term, reading, sources, languageSummary) {
232
258
  const { AudioUrlGenerator } = await Promise.resolve().then(function() {
233
- return require("./audio-url-generator-CfXaxZ47.cjs");
259
+ return require("./audio-url-generator-CZECihX-.cjs");
234
260
  });
235
261
  const generator = new AudioUrlGenerator();
236
262
  return await generator.getUrls(term, reading, sources, languageSummary);
237
263
  }
238
264
  async createAnkiClient(config) {
239
265
  const { AnkiConnect } = await Promise.resolve().then(function() {
240
- return require("./anki-connect-D-02BbHi.cjs");
266
+ return require("./anki-connect-BXvjYYm0.cjs");
241
267
  });
242
268
  return new AnkiConnect(config);
243
269
  }
244
270
  async createRenderer() {
245
271
  const displayGen = await Promise.resolve().then(function() {
246
- return require("./display-generator-G2e03o0R.cjs");
272
+ return require("./display-generator-D5fkD0JI.cjs");
247
273
  });
248
274
  const structuredGen = await Promise.resolve().then(function() {
249
- return require("./structured-content-generator-D48bLhPA.cjs");
275
+ return require("./structured-content-generator-_z5dJECG.cjs");
250
276
  });
251
277
  const pronunciationGen = await Promise.resolve().then(function() {
252
- return require("./pronunciation-generator-CPwnr43z.cjs");
278
+ return require("./pronunciation-generator-CP1kjYje.cjs");
253
279
  });
254
280
  return {
255
281
  DisplayGenerator: displayGen.DisplayGenerator,
@@ -259,7 +285,7 @@ var YomitanCore = class {
259
285
  }
260
286
  async createAudioUrlGenerator() {
261
287
  const { AudioUrlGenerator } = await Promise.resolve().then(function() {
262
- return require("./audio-url-generator-CfXaxZ47.cjs");
288
+ return require("./audio-url-generator-CZECihX-.cjs");
263
289
  });
264
290
  return new AudioUrlGenerator();
265
291
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["eventName: TName","details: EventArgument<TSurface, TName>","callback: EventHandler<TSurface, TName>","config?: YomitanCoreConfig","DictionaryDB","MultiLanguageTransformer","archive: ArrayBuffer","options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n }","details: DictionaryImporterTypes.ImportDetails","name: string","onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback","text: string","config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n }","mode: FindTermsMode","findOptions: Translation.FindTermsOptions","config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n }","findOptions: Translation.FindKanjiOptions","options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n }","reading: string","texts: string[]","config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n }","term: string","dictionaries: string[]","reading?: string","names?: string[]","sources: { type: string; url: string; voice: string }[]","languageSummary: { name: string; iso: string; exampleText: string }","config?: { server?: string; apiKey?: string }"],"sources":["../src/util/event-dispatcher.ts","../src/index.ts"],"sourcesContent":["import type { EventArgument, EventHandler, EventHandlerAny, EventNames, EventSurface } from '../types/core';\n\n/**\n * Base class that controls basic event dispatching.\n */\nexport class EventDispatcher<TSurface extends EventSurface> {\n private _eventMap: Map<EventNames<TSurface>, EventHandlerAny[]>;\n\n constructor() {\n this._eventMap = new Map();\n }\n\n trigger<TName extends EventNames<TSurface>>(eventName: TName, details: EventArgument<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n for (const callback of callbacks) {\n callback(details);\n }\n return true;\n }\n\n on<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): void {\n let callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n callbacks = [];\n this._eventMap.set(eventName, callbacks);\n }\n callbacks.push(callback as EventHandlerAny);\n }\n\n off<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n const ii = callbacks.length;\n for (let i = 0; i < ii; ++i) {\n if (callbacks[i] === callback) {\n callbacks.splice(i, 1);\n if (callbacks.length === 0) {\n this._eventMap.delete(eventName);\n }\n return true;\n }\n }\n return false;\n }\n\n hasListeners<TName extends EventNames<TSurface>>(eventName: TName): boolean {\n const callbacks = this._eventMap.get(eventName);\n return typeof callbacks !== 'undefined' && callbacks.length > 0;\n }\n}\n","// Main entry point for yomitan-core\nimport { DictionaryDB } from './database/dictionary-database';\nimport type { DictionaryImporterClass } from './import/dictionary-importer';\nimport { getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from './language/languages';\nimport { MultiLanguageTransformer } from './language/multi-language-transformer';\nimport type { BatchProcessor as BatchProcessorClass } from './lookup/batch-processor';\nimport type { FrequencyRanker as FrequencyRankerClass } from './lookup/frequency-ranking';\nimport type { SentenceParser as SentenceParserClass } from './lookup/sentence-parser';\nimport type { FindTermsMode, Translator as TranslatorClass } from './lookup/translator';\nimport type * as Dictionary from './types/dictionary';\nimport type * as DictionaryDatabase from './types/dictionary-database';\nimport type * as DictionaryImporterTypes from './types/dictionary-importer';\nimport type * as Translation from './types/translation';\n\n// Re-export all types\nexport * from './types/index';\n\n// Re-export utilities\nexport { YomitanError, toError } from './util/errors';\nexport { EventDispatcher } from './util/event-dispatcher';\nexport { log } from './util/log';\n\n// Re-export key classes from submodules\nexport { DictionaryDB } from './database/dictionary-database';\nexport { YomitanDatabase } from './database/schema';\n\nexport interface YomitanCoreConfig {\n /** Database name (default: 'dict') */\n databaseName?: string;\n /** Whether to automatically initialize language transformers (default: true) */\n initLanguage?: boolean;\n}\n\nexport interface TermLookupResult {\n entries: Dictionary.TermDictionaryEntry[];\n originalTextLength: number;\n}\n\nexport interface FuriganaSegment {\n text: string;\n reading: string;\n}\n\nexport interface FrequencyRankingResult {\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n harmonicMean: number;\n}\n\nexport interface DictionaryUpdateInfo {\n dictionaryName: string;\n currentRevision: string;\n latestRevision: string;\n hasUpdate: boolean;\n downloadUrl?: string;\n}\n\nexport class YomitanCore {\n private _db: DictionaryDB;\n private _multiLanguageTransformer: MultiLanguageTransformer;\n private _translator: TranslatorClass | null = null;\n private _sentenceParser: SentenceParserClass | null = null;\n private _batchProcessor: BatchProcessorClass | null = null;\n private _frequencyRanker: FrequencyRankerClass | null = null;\n private _initialized = false;\n private _config: Required<YomitanCoreConfig>;\n\n constructor(config?: YomitanCoreConfig) {\n this._config = {\n databaseName: config?.databaseName ?? 'dict',\n initLanguage: config?.initLanguage ?? true,\n };\n this._db = new DictionaryDB(this._config.databaseName);\n this._multiLanguageTransformer = new MultiLanguageTransformer();\n }\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n await this._db.open();\n\n if (this._config.initLanguage) {\n this._multiLanguageTransformer.prepare();\n }\n\n this._initialized = true;\n }\n\n async dispose(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n this._db.close();\n this._translator = null;\n this._sentenceParser = null;\n this._batchProcessor = null;\n this._frequencyRanker = null;\n this._initialized = false;\n }\n\n get isReady(): boolean {\n return this._initialized;\n }\n\n get database(): DictionaryDB {\n this._ensureInitialized();\n return this._db;\n }\n\n async getTranslator(): Promise<TranslatorClass> {\n this._ensureInitialized();\n if (!this._translator) {\n const { Translator } = await import('./lookup/translator');\n this._translator = new Translator(this._db);\n this._translator.prepare();\n }\n return this._translator;\n }\n\n get language(): {\n summaries: ReturnType<typeof getLanguageSummaries>;\n textProcessors: ReturnType<typeof getAllLanguageTextProcessors>;\n transformer: MultiLanguageTransformer;\n isTextLookupWorthy: typeof isTextLookupWorthy;\n } {\n return {\n summaries: getLanguageSummaries(),\n textProcessors: getAllLanguageTextProcessors(),\n transformer: this._multiLanguageTransformer,\n isTextLookupWorthy,\n };\n }\n\n // ---- Dictionary Management ----\n\n async importDictionary(\n archive: ArrayBuffer,\n options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n },\n ): Promise<DictionaryImporterTypes.ImportResult> {\n this._ensureInitialized();\n const { DictionaryImporterClass: DictionaryImporter } = await import('./import/dictionary-importer');\n const { NoOpMediaLoader } = await import('./import/media-loader');\n\n const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);\n const details: DictionaryImporterTypes.ImportDetails = {\n prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,\n yomitanVersion: options?.yomitanVersion ?? '0.0.0',\n };\n return await importer.importDictionary(this._db, archive, details);\n }\n\n async deleteDictionary(\n name: string,\n onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback,\n ): Promise<void> {\n this._ensureInitialized();\n await this._db.deleteDictionary(name, onProgress);\n }\n\n async getDictionaryInfo(): Promise<DictionaryImporterTypes.Summary[]> {\n this._ensureInitialized();\n return await this._db.getDictionaryInfo();\n }\n\n // ---- Core Lookup ----\n\n async findTerms(\n text: string,\n config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n },\n ): Promise<TermLookupResult> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n const mode: FindTermsMode = config.mode ?? 'group';\n\n const findOptions: Translation.FindTermsOptions = {\n matchType: config.options?.matchType ?? 'exact',\n deinflect: config.options?.deinflect ?? true,\n primaryReading: config.options?.primaryReading ?? '',\n mainDictionary: config.options?.mainDictionary ?? '',\n sortFrequencyDictionary: config.options?.sortFrequencyDictionary ?? null,\n sortFrequencyDictionaryOrder: config.options?.sortFrequencyDictionaryOrder ?? 'descending',\n removeNonJapaneseCharacters: config.options?.removeNonJapaneseCharacters ?? false,\n textReplacements: config.options?.textReplacements ?? [null],\n enabledDictionaryMap: config.enabledDictionaryMap,\n excludeDictionaryDefinitions: config.options?.excludeDictionaryDefinitions ?? null,\n searchResolution: config.options?.searchResolution ?? 'letter',\n language: config.language ?? 'ja',\n };\n\n const { dictionaryEntries, originalTextLength } = await translator.findTerms(mode, text, findOptions);\n\n return { entries: dictionaryEntries, originalTextLength };\n }\n\n async findKanji(\n text: string,\n config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n },\n ): Promise<Dictionary.KanjiDictionaryEntry[]> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n\n const findOptions: Translation.FindKanjiOptions = {\n enabledDictionaryMap: config.enabledDictionaryMap,\n removeNonJapaneseCharacters: config.removeNonJapaneseCharacters ?? true,\n };\n\n return await translator.findKanji(text, findOptions);\n }\n\n // ---- Additional Features ----\n\n async parseText(\n text: string,\n options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n },\n ): Promise<unknown[]> {\n this._ensureInitialized();\n if (!this._sentenceParser) {\n const translator = await this.getTranslator();\n const { SentenceParser } = await import('./lookup/sentence-parser');\n this._sentenceParser = new SentenceParser(translator);\n }\n return await this._sentenceParser.parseText(text, options.language ?? 'ja', {\n enabledDictionaryMap: options.enabledDictionaryMap,\n scanLength: options.scanLength,\n maxLength: options.maxLength,\n searchResolution: options.searchResolution,\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n textReplacements: options.textReplacements,\n });\n }\n\n async generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]> {\n const { generateFurigana } = await import('./language/ja/furigana');\n return generateFurigana(text, reading);\n }\n\n async batchLookup(\n texts: string[],\n config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n },\n ): Promise<Map<string, TermLookupResult>> {\n this._ensureInitialized();\n if (!this._batchProcessor) {\n const translator = await this.getTranslator();\n const { BatchProcessor } = await import('./lookup/batch-processor');\n this._batchProcessor = new BatchProcessor(translator);\n }\n const results = await this._batchProcessor.batchLookup(texts, {\n language: config.language,\n enabledDictionaryMap: config.enabledDictionaryMap,\n concurrency: config.concurrency,\n });\n const mapped = new Map<string, TermLookupResult>();\n for (const [key, value] of results) {\n mapped.set(key, { entries: value.entries, originalTextLength: value.originalTextLength });\n }\n return mapped;\n }\n\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRankingResult> {\n this._ensureInitialized();\n if (!this._frequencyRanker) {\n const { FrequencyRanker } = await import('./lookup/frequency-ranking');\n this._frequencyRanker = new FrequencyRanker(this._db);\n }\n return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);\n }\n\n async checkForUpdates(names?: string[]): Promise<DictionaryUpdateInfo[]> {\n this._ensureInitialized();\n const { DictionaryUpdateChecker } = await import('./import/dictionary-update-checker');\n const checker = new DictionaryUpdateChecker(this._db);\n return await checker.checkForUpdates(names);\n }\n\n async getAudioUrls(\n term: string,\n reading: string,\n sources: { type: string; url: string; voice: string }[],\n languageSummary: { name: string; iso: string; exampleText: string },\n ): Promise<unknown[]> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n const generator = new AudioUrlGenerator();\n return (await generator.getUrls(term, reading, sources as any[], languageSummary as any)) as unknown[];\n }\n\n // ---- Factory Methods ----\n\n async createAnkiClient(config?: { server?: string; apiKey?: string }): Promise<unknown> {\n const { AnkiConnect } = await import('./anki/anki-connect');\n return new AnkiConnect(config);\n }\n\n async createRenderer(): Promise<{\n DisplayGenerator: unknown;\n StructuredContentGenerator: unknown;\n PronunciationGenerator: unknown;\n }> {\n const displayGen = await import('./render/display-generator');\n const structuredGen = await import('./render/structured-content-generator');\n const pronunciationGen = await import('./render/pronunciation-generator');\n return {\n DisplayGenerator: displayGen.DisplayGenerator,\n StructuredContentGenerator: structuredGen.StructuredContentGenerator,\n PronunciationGenerator: pronunciationGen.PronunciationGenerator,\n };\n }\n\n async createAudioUrlGenerator(): Promise<unknown> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n return new AudioUrlGenerator();\n }\n\n // ---- Private ----\n\n private _ensureInitialized(): void {\n if (!this._initialized) {\n throw new Error('YomitanCore is not initialized. Call initialize() first.');\n }\n }\n}\n\n// Default export\nexport default YomitanCore;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["eventName: TName","details: EventArgument<TSurface, TName>","callback: EventHandler<TSurface, TName>","config?: YomitanCoreConfig","DictionaryDB","MultiLanguageTransformer","archive: ArrayBuffer","options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n }","details: DictionaryImporterTypes.ImportDetails","name: string","onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback","text: string","config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n }","mode: FindTermsMode","findOptions: Translation.FindTermsOptions","config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n }","findOptions: Translation.FindKanjiOptions","options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n }","reading: string","texts: string[]","config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n }","term: string","dictionaries: string[]","reading?: string","names?: string[]","sources: { type: string; url: string; voice: string }[]","languageSummary: { name: string; iso: string; exampleText: string }","config?: { server?: string; apiKey?: string }"],"sources":["../src/util/event-dispatcher.ts","../src/index.ts"],"sourcesContent":["import type { EventArgument, EventHandler, EventHandlerAny, EventNames, EventSurface } from '../types/core';\n\n/**\n * Base class that controls basic event dispatching.\n */\nexport class EventDispatcher<TSurface extends EventSurface> {\n private _eventMap: Map<EventNames<TSurface>, EventHandlerAny[]>;\n\n constructor() {\n this._eventMap = new Map();\n }\n\n trigger<TName extends EventNames<TSurface>>(eventName: TName, details: EventArgument<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n for (const callback of callbacks) {\n callback(details);\n }\n return true;\n }\n\n on<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): void {\n let callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n callbacks = [];\n this._eventMap.set(eventName, callbacks);\n }\n callbacks.push(callback as EventHandlerAny);\n }\n\n off<TName extends EventNames<TSurface>>(eventName: TName, callback: EventHandler<TSurface, TName>): boolean {\n const callbacks = this._eventMap.get(eventName);\n if (typeof callbacks === 'undefined') {\n return false;\n }\n const ii = callbacks.length;\n for (let i = 0; i < ii; ++i) {\n if (callbacks[i] === callback) {\n callbacks.splice(i, 1);\n if (callbacks.length === 0) {\n this._eventMap.delete(eventName);\n }\n return true;\n }\n }\n return false;\n }\n\n hasListeners<TName extends EventNames<TSurface>>(eventName: TName): boolean {\n const callbacks = this._eventMap.get(eventName);\n return typeof callbacks !== 'undefined' && callbacks.length > 0;\n }\n}\n","// Main entry point for yomitan-core\nimport { DictionaryDB } from './database/dictionary-database';\nimport type { DictionaryImporterClass } from './import/dictionary-importer';\nimport { getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from './language/languages';\nimport { MultiLanguageTransformer } from './language/multi-language-transformer';\nimport type { BatchProcessor as BatchProcessorClass } from './lookup/batch-processor';\nimport type { FrequencyRanker as FrequencyRankerClass } from './lookup/frequency-ranking';\nimport type { ParseTextResultItem } from './lookup/sentence-parser';\nimport type { SentenceParser as SentenceParserClass } from './lookup/sentence-parser';\nimport type { FindTermsMode, Translator as TranslatorClass } from './lookup/translator';\nimport type * as Dictionary from './types/dictionary';\nimport type * as DictionaryDatabase from './types/dictionary-database';\nimport type * as DictionaryImporterTypes from './types/dictionary-importer';\nimport type * as Translation from './types/translation';\nimport { codePointPreview, debugYomitanCore } from './util/debug';\n\n// Re-export all types\nexport * from './types/index';\n\n// Re-export utilities\nexport { YomitanError, toError } from './util/errors';\nexport { EventDispatcher } from './util/event-dispatcher';\nexport { log } from './util/log';\n\n// Re-export key classes from submodules\nexport { DictionaryDB } from './database/dictionary-database';\nexport { YomitanDatabase } from './database/schema';\n\nexport interface YomitanCoreConfig {\n /** Database name (default: 'dict') */\n databaseName?: string;\n /** Whether to automatically initialize language transformers (default: true) */\n initLanguage?: boolean;\n}\n\nexport interface TermLookupResult {\n entries: Dictionary.TermDictionaryEntry[];\n originalTextLength: number;\n}\n\nexport interface FuriganaSegment {\n text: string;\n reading: string;\n}\n\nexport interface FrequencyRankingResult {\n frequencies: { dictionary: string; frequency: number; displayValue: string | null }[];\n harmonicMean: number;\n}\n\nexport interface DictionaryUpdateInfo {\n dictionaryName: string;\n currentRevision: string;\n latestRevision: string;\n hasUpdate: boolean;\n downloadUrl?: string;\n}\n\nexport class YomitanCore {\n private _db: DictionaryDB;\n private _multiLanguageTransformer: MultiLanguageTransformer;\n private _translator: TranslatorClass | null = null;\n private _sentenceParser: SentenceParserClass | null = null;\n private _batchProcessor: BatchProcessorClass | null = null;\n private _frequencyRanker: FrequencyRankerClass | null = null;\n private _initialized = false;\n private _config: Required<YomitanCoreConfig>;\n\n constructor(config?: YomitanCoreConfig) {\n this._config = {\n databaseName: config?.databaseName ?? 'dict',\n initLanguage: config?.initLanguage ?? true,\n };\n this._db = new DictionaryDB(this._config.databaseName);\n this._multiLanguageTransformer = new MultiLanguageTransformer();\n }\n\n async initialize(): Promise<void> {\n if (this._initialized) {\n return;\n }\n\n await this._db.open();\n\n if (this._config.initLanguage) {\n this._multiLanguageTransformer.prepare();\n }\n\n this._initialized = true;\n }\n\n async dispose(): Promise<void> {\n if (!this._initialized) {\n return;\n }\n this._db.close();\n this._translator = null;\n this._sentenceParser = null;\n this._batchProcessor = null;\n this._frequencyRanker = null;\n this._initialized = false;\n }\n\n get isReady(): boolean {\n return this._initialized;\n }\n\n get database(): DictionaryDB {\n this._ensureInitialized();\n return this._db;\n }\n\n async getTranslator(): Promise<TranslatorClass> {\n this._ensureInitialized();\n if (!this._translator) {\n const { Translator } = await import('./lookup/translator');\n this._translator = new Translator(this._db);\n this._translator.prepare();\n }\n return this._translator;\n }\n\n get language(): {\n summaries: ReturnType<typeof getLanguageSummaries>;\n textProcessors: ReturnType<typeof getAllLanguageTextProcessors>;\n transformer: MultiLanguageTransformer;\n isTextLookupWorthy: typeof isTextLookupWorthy;\n } {\n return {\n summaries: getLanguageSummaries(),\n textProcessors: getAllLanguageTextProcessors(),\n transformer: this._multiLanguageTransformer,\n isTextLookupWorthy,\n };\n }\n\n // ---- Dictionary Management ----\n\n async importDictionary(\n archive: ArrayBuffer,\n options?: {\n onProgress?: DictionaryImporterTypes.OnProgressCallback;\n prefixWildcardsSupported?: boolean;\n yomitanVersion?: string;\n },\n ): Promise<DictionaryImporterTypes.ImportResult> {\n this._ensureInitialized();\n const { DictionaryImporterClass: DictionaryImporter } = await import('./import/dictionary-importer');\n const { NoOpMediaLoader } = await import('./import/media-loader');\n\n const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);\n const details: DictionaryImporterTypes.ImportDetails = {\n prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,\n yomitanVersion: options?.yomitanVersion ?? '0.0.0',\n };\n return await importer.importDictionary(this._db, archive, details);\n }\n\n async deleteDictionary(\n name: string,\n onProgress?: DictionaryDatabase.DeleteDictionaryProgressCallback,\n ): Promise<void> {\n this._ensureInitialized();\n await this._db.deleteDictionary(name, onProgress);\n }\n\n async getDictionaryInfo(): Promise<DictionaryImporterTypes.Summary[]> {\n this._ensureInitialized();\n return await this._db.getDictionaryInfo();\n }\n\n // ---- Core Lookup ----\n\n async findTerms(\n text: string,\n config: {\n mode?: FindTermsMode;\n language?: string;\n enabledDictionaryMap: Translation.TermEnabledDictionaryMap;\n options?: Partial<Translation.FindTermsOptions>;\n },\n ): Promise<TermLookupResult> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n const mode: FindTermsMode = config.mode ?? 'group';\n\n const findOptions: Translation.FindTermsOptions = {\n matchType: config.options?.matchType ?? 'exact',\n deinflect: config.options?.deinflect ?? true,\n primaryReading: config.options?.primaryReading ?? '',\n mainDictionary: config.options?.mainDictionary ?? '',\n sortFrequencyDictionary: config.options?.sortFrequencyDictionary ?? null,\n sortFrequencyDictionaryOrder: config.options?.sortFrequencyDictionaryOrder ?? 'descending',\n removeNonJapaneseCharacters: config.options?.removeNonJapaneseCharacters ?? false,\n textReplacements: config.options?.textReplacements ?? [null],\n enabledDictionaryMap: config.enabledDictionaryMap,\n excludeDictionaryDefinitions: config.options?.excludeDictionaryDefinitions ?? null,\n searchResolution: config.options?.searchResolution ?? 'letter',\n language: config.language ?? 'ja',\n };\n\n const { dictionaryEntries, originalTextLength } = await translator.findTerms(mode, text, findOptions);\n\n return { entries: dictionaryEntries, originalTextLength };\n }\n\n async findKanji(\n text: string,\n config: {\n enabledDictionaryMap: Translation.KanjiEnabledDictionaryMap;\n removeNonJapaneseCharacters?: boolean;\n },\n ): Promise<Dictionary.KanjiDictionaryEntry[]> {\n this._ensureInitialized();\n const translator = await this.getTranslator();\n\n const findOptions: Translation.FindKanjiOptions = {\n enabledDictionaryMap: config.enabledDictionaryMap,\n removeNonJapaneseCharacters: config.removeNonJapaneseCharacters ?? true,\n };\n\n return await translator.findKanji(text, findOptions);\n }\n\n // ---- Additional Features ----\n\n async parseText(\n text: string,\n options: {\n language?: string;\n enabledDictionaryMap: Map<\n string,\n {\n index: number;\n priority?: number;\n alias?: string;\n allowSecondarySearches?: boolean;\n partsOfSpeechFilter?: boolean;\n useDeinflections?: boolean;\n }\n >;\n scanLength?: number;\n maxLength?: number;\n searchResolution?: 'letter' | 'word';\n removeNonJapaneseCharacters?: boolean;\n deinflect?: boolean;\n textReplacements?: (import('./types/translation').FindTermsTextReplacement[] | null)[];\n },\n ): Promise<ParseTextResultItem[]> {\n this._ensureInitialized();\n debugYomitanCore('index', 'parseText:start', {\n textLength: text.length,\n textPreview: text.slice(0, 120),\n textCodePoints: codePointPreview(text),\n language: options.language ?? 'ja',\n enabledDictionaryCount: options.enabledDictionaryMap.size,\n enabledDictionaryNames: [...options.enabledDictionaryMap.keys()],\n scanLength: options.scanLength ?? options.maxLength ?? 20,\n searchResolution: options.searchResolution ?? 'letter',\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n });\n\n if (!this._sentenceParser) {\n const translator = await this.getTranslator();\n const { SentenceParser } = await import('./lookup/sentence-parser');\n this._sentenceParser = new SentenceParser(translator);\n }\n const parsedLines = await this._sentenceParser.parseText(text, options.language ?? 'ja', {\n enabledDictionaryMap: options.enabledDictionaryMap,\n scanLength: options.scanLength,\n maxLength: options.maxLength,\n searchResolution: options.searchResolution,\n removeNonJapaneseCharacters: options.removeNonJapaneseCharacters,\n deinflect: options.deinflect,\n textReplacements: options.textReplacements,\n });\n debugYomitanCore('index', 'parseText:complete', {\n parseLineCount: parsedLines.length,\n segmentCount: parsedLines.reduce((count, line) => count + line.length, 0),\n lineSegmentCounts: parsedLines.map((line) => line.length),\n selectableSegmentCount: parsedLines.reduce(\n (count, line) => count + line.filter((segment) => Array.isArray(segment.headwords)).length,\n 0,\n ),\n });\n\n return [\n {\n id: 'scan',\n source: 'scanning-parser',\n dictionary: null,\n index: 0,\n content: parsedLines,\n },\n ];\n }\n\n async generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]> {\n const { generateFurigana } = await import('./language/ja/furigana');\n return generateFurigana(text, reading);\n }\n\n async batchLookup(\n texts: string[],\n config: {\n language?: string;\n enabledDictionaryMap: Map<string, { index: number; priority: number }>;\n concurrency?: number;\n },\n ): Promise<Map<string, TermLookupResult>> {\n this._ensureInitialized();\n if (!this._batchProcessor) {\n const translator = await this.getTranslator();\n const { BatchProcessor } = await import('./lookup/batch-processor');\n this._batchProcessor = new BatchProcessor(translator);\n }\n const results = await this._batchProcessor.batchLookup(texts, {\n language: config.language,\n enabledDictionaryMap: config.enabledDictionaryMap,\n concurrency: config.concurrency,\n });\n const mapped = new Map<string, TermLookupResult>();\n for (const [key, value] of results) {\n mapped.set(key, { entries: value.entries, originalTextLength: value.originalTextLength });\n }\n return mapped;\n }\n\n async getFrequencyRanking(term: string, dictionaries: string[], reading?: string): Promise<FrequencyRankingResult> {\n this._ensureInitialized();\n if (!this._frequencyRanker) {\n const { FrequencyRanker } = await import('./lookup/frequency-ranking');\n this._frequencyRanker = new FrequencyRanker(this._db);\n }\n return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);\n }\n\n async checkForUpdates(names?: string[]): Promise<DictionaryUpdateInfo[]> {\n this._ensureInitialized();\n const { DictionaryUpdateChecker } = await import('./import/dictionary-update-checker');\n const checker = new DictionaryUpdateChecker(this._db);\n return await checker.checkForUpdates(names);\n }\n\n async getAudioUrls(\n term: string,\n reading: string,\n sources: { type: string; url: string; voice: string }[],\n languageSummary: { name: string; iso: string; exampleText: string },\n ): Promise<unknown[]> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n const generator = new AudioUrlGenerator();\n return (await generator.getUrls(term, reading, sources as any[], languageSummary as any)) as unknown[];\n }\n\n // ---- Factory Methods ----\n\n async createAnkiClient(config?: { server?: string; apiKey?: string }): Promise<unknown> {\n const { AnkiConnect } = await import('./anki/anki-connect');\n return new AnkiConnect(config);\n }\n\n async createRenderer(): Promise<{\n DisplayGenerator: unknown;\n StructuredContentGenerator: unknown;\n PronunciationGenerator: unknown;\n }> {\n const displayGen = await import('./render/display-generator');\n const structuredGen = await import('./render/structured-content-generator');\n const pronunciationGen = await import('./render/pronunciation-generator');\n return {\n DisplayGenerator: displayGen.DisplayGenerator,\n StructuredContentGenerator: structuredGen.StructuredContentGenerator,\n PronunciationGenerator: pronunciationGen.PronunciationGenerator,\n };\n }\n\n async createAudioUrlGenerator(): Promise<unknown> {\n const { AudioUrlGenerator } = await import('./audio/audio-url-generator');\n return new AudioUrlGenerator();\n }\n\n // ---- Private ----\n\n private _ensureInitialized(): void {\n if (!this._initialized) {\n throw new Error('YomitanCore is not initialized. Call initialize() first.');\n }\n }\n}\n\n// Default export\nexport default YomitanCore;\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -4,7 +4,7 @@ import { AudioInfo, AudioSourceInfo, AudioSourceType, AudioTtsInfo, AudioUrlInfo
4
4
  import { BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, DeinflectFunction, IsTextLookupWorthyFunction, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, ReadingNormalizer, Rule, RuleI18n, SuffixRule, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorWithId, Transform, TransformI18n, TransformMapObject } from "./language-xAbQxgXc.cjs";
5
5
  import { ArchiveFileMap, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, DeleteDictionaryProgressCallback, ImageImportRequirement, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, OnProgressCallback, ProgressData, QueryDetails, QueryResult, StructuredContentImageImportRequirement, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount } from "./dictionary-importer-CYMaT3qh.cjs";
6
6
  import { DictionaryDB, YomitanDatabase } from "./dictionary-database-3OesNIMt.cjs";
7
- import { FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsMode, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, KanjiEnabledDictionaryMap, SearchResolution, TermEnabledDictionaryMap, Translator } from "./translator-TiTDVbmS.cjs";
7
+ import { FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsMode, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, KanjiEnabledDictionaryMap, ParseTextHeadword, ParseTextLine, ParseTextResultItem, ParseTextSegment, SearchResolution, TermEnabledDictionaryMap, Translator } from "./sentence-parser-BQpu2oSA.cjs";
8
8
  import { MultiLanguageTransformer, getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from "./multi-language-transformer-KEzXdvLB.cjs";
9
9
 
10
10
  //#region src/types/settings.d.ts
@@ -181,7 +181,7 @@ declare class YomitanCore {
181
181
  removeNonJapaneseCharacters?: boolean;
182
182
  deinflect?: boolean;
183
183
  textReplacements?: (FindTermsTextReplacement[] | null)[];
184
- }): Promise<unknown[]>;
184
+ }): Promise<ParseTextResultItem[]>;
185
185
  generateFurigana(text: string, reading: string): Promise<FuriganaSegment[]>;
186
186
  batchLookup(texts: string[], config: {
187
187
  language?: string;
@@ -216,5 +216,5 @@ declare class YomitanCore {
216
216
  }
217
217
 
218
218
  //#endregion
219
- export { AnkiDuplicateScope, AnkiOptions, ApiReflectResult, ArchiveFileMap, AudioInfo, AudioOptions, AudioSourceInfo, AudioSourceOptions, AudioSourceType, AudioTtsInfo, AudioUrlInfo, BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, CanAddNotesDetail, CardId, CardInfo, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, Content, CustomAudioList, Data, DeferredPromiseDetails, DeinflectFunction, DictionaryDB, DictionaryEntry, DictionaryEntryType, DictionaryUpdateInfo, Element, EventArgument, EventDispatcher, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, FontStyle, FontWeight, FrequencyRankingResult, FuriganaSegment, GeneralOptions, Image, ImageAppearance, ImageElement, ImageElementBase, ImageImportRequirement, ImageRendering, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, IsTextLookupWorthyFunction, KanjiDictionaryEntry, KanjiEnabledDictionaryMap, KanjiFrequency, KanjiStat, KanjiStatGroups, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, LineBreak, LinkElement, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, OnProgressCallback, PhoneticTranscription, PitchAccent, ProfileOptions, ProgressData, Pronunciation, PronunciationGeneric, PronunciationType, QueryDetails, QueryResult, ReadingNormalizer, RejectionReason, Rule, RuleI18n, SafeAny, SearchResolution, SerializableObject, SizeUnits, StructuredContentImageImportRequirement, StructuredContentStyle, StyledElement, SuffixRule, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermEnabledDictionaryMap, TermFrequency, TermHeadword, TermLookupResult, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorRuleChainCandidate, TextProcessorWithId, Timeout, TokenObject, TokenString, Transform, TransformI18n, TransformMapObject, TranslationOptions, TypeofResult, UnknownObject, UnstyledElement, VerticalAlign, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse, WordBreak, YomitanCore, YomitanCoreConfig, YomitanDatabase, YomitanError, YomitanCore as default, log, toError };
219
+ export { AnkiDuplicateScope, AnkiOptions, ApiReflectResult, ArchiveFileMap, AudioInfo, AudioOptions, AudioSourceInfo, AudioSourceOptions, AudioSourceType, AudioTtsInfo, AudioUrlInfo, BidirectionalConversionPreprocessor, BidirectionalPreprocessorOptions, CanAddNotesDetail, CardId, CardInfo, CompiledSchemaName, CompiledSchemaNameArray, CompiledSchemaValidators, Condition, ConditionMapEntries, ConditionMapEntry, ConditionMapObject, Content, CustomAudioList, Data, DeferredPromiseDetails, DeinflectFunction, DictionaryDB, DictionaryEntry, DictionaryEntryType, DictionaryUpdateInfo, Element, EventArgument, EventDispatcher, EventDispatcherOffGeneric, EventHandler, EventHandlerAny, EventNames, EventSurface, FindKanjiDictionary, FindKanjiOptions, FindTermDictionary, FindTermsMatchType, FindTermsOptions, FindTermsSortOrder, FindTermsTextReplacement, FindTermsTextReplacements, FontStyle, FontWeight, FrequencyRankingResult, FuriganaSegment, GeneralOptions, Image, ImageAppearance, ImageElement, ImageElementBase, ImageImportRequirement, ImageRendering, ImportDetails, ImportRequirement, ImportRequirementContext, ImportResult, ImportStep, ImportSteps, InflectionRule, InflectionRuleChain, InflectionRuleChainCandidate, InflectionSource, IsTextLookupWorthyFunction, KanjiDictionaryEntry, KanjiEnabledDictionaryMap, KanjiFrequency, KanjiStat, KanjiStatGroups, LanguageAndProcessors, LanguageAndReadingNormalizer, LanguageAndTransforms, LanguageDescriptorAny, LanguageSummary, LanguageTransformDescriptor, LineBreak, LinkElement, MessageBody, Note, NoteFieldInfo, NoteFields, NoteId, NoteInfo, NoteInfoWrapper, NoteWithId, OnProgressCallback, ParseTextHeadword, ParseTextLine, ParseTextResultItem, ParseTextSegment, PhoneticTranscription, PitchAccent, ProfileOptions, ProgressData, Pronunciation, PronunciationGeneric, PronunciationType, QueryDetails, QueryResult, ReadingNormalizer, RejectionReason, Rule, RuleI18n, SafeAny, SearchResolution, SerializableObject, SizeUnits, StructuredContentImageImportRequirement, StructuredContentStyle, StyledElement, SuffixRule, Summary, SummaryCounts, SummaryDetails, SummaryItemCount, SummaryMetaCount, TableElement, Tag, TermDefinition, TermDictionaryEntry, TermEnabledDictionaryMap, TermFrequency, TermHeadword, TermLookupResult, TermPronunciation, TermSource, TermSourceMatchSource, TermSourceMatchType, TextAlign, TextDecorationLine, TextDecorationLineOrNone, TextDecorationStyle, TextProcessor, TextProcessorFunction, TextProcessorOptions, TextProcessorRuleChainCandidate, TextProcessorWithId, Timeout, TokenObject, TokenString, Transform, TransformI18n, TransformMapObject, TranslationOptions, TypeofResult, UnknownObject, UnstyledElement, VerticalAlign, WikimediaCommonsFileResponse, WikimediaCommonsLookupResponse, WordBreak, YomitanCore, YomitanCoreConfig, YomitanDatabase, YomitanError, YomitanCore as default, log, toError };
220
220
  //# sourceMappingURL=index.d.cts.map