yomitan-core 0.1.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 (207) hide show
  1. package/README.md +485 -0
  2. package/dist/anki-connect-BQyCGW3O.cjs +513 -0
  3. package/dist/anki-connect-BQyCGW3O.cjs.map +1 -0
  4. package/dist/anki-connect-CPPuhyiQ.js +6 -0
  5. package/dist/anki-connect-DbrQHphS.js +495 -0
  6. package/dist/anki-connect-DbrQHphS.js.map +1 -0
  7. package/dist/anki-connect-DcheJrp-.cjs +6 -0
  8. package/dist/anki.cjs +1758 -0
  9. package/dist/anki.cjs.map +1 -0
  10. package/dist/anki.d.cts +751 -0
  11. package/dist/anki.d.cts.map +1 -0
  12. package/dist/anki.d.ts +751 -0
  13. package/dist/anki.d.ts.map +1 -0
  14. package/dist/anki.js +1751 -0
  15. package/dist/anki.js.map +1 -0
  16. package/dist/audio-D9DvYyB7.d.cts +48 -0
  17. package/dist/audio-D9DvYyB7.d.cts.map +1 -0
  18. package/dist/audio-DQulUkDM.d.ts +48 -0
  19. package/dist/audio-DQulUkDM.d.ts.map +1 -0
  20. package/dist/audio-url-generator-BXvQaqUi.cjs +4 -0
  21. package/dist/audio-url-generator-Dy2hb2Mm.cjs +414 -0
  22. package/dist/audio-url-generator-Dy2hb2Mm.cjs.map +1 -0
  23. package/dist/audio-url-generator-Qi0rfzHz.js +4 -0
  24. package/dist/audio-url-generator-pFQAB5Nb.js +390 -0
  25. package/dist/audio-url-generator-pFQAB5Nb.js.map +1 -0
  26. package/dist/audio.cjs +7 -0
  27. package/dist/audio.d.cts +86 -0
  28. package/dist/audio.d.cts.map +1 -0
  29. package/dist/audio.d.ts +86 -0
  30. package/dist/audio.d.ts.map +1 -0
  31. package/dist/audio.js +4 -0
  32. package/dist/batch-processor-BR-gB3H3.js +84 -0
  33. package/dist/batch-processor-BR-gB3H3.js.map +1 -0
  34. package/dist/batch-processor-CSF1acTw.cjs +3 -0
  35. package/dist/batch-processor-DFqM_L-_.cjs +91 -0
  36. package/dist/batch-processor-DFqM_L-_.cjs.map +1 -0
  37. package/dist/batch-processor-Quo9jUyf.js +3 -0
  38. package/dist/chunk-BCwAaXi7.cjs +31 -0
  39. package/dist/cjk-util-Dp0ZU0sh.cjs +167 -0
  40. package/dist/cjk-util-Dp0ZU0sh.cjs.map +1 -0
  41. package/dist/cjk-util-DubXBGDG.js +94 -0
  42. package/dist/cjk-util-DubXBGDG.js.map +1 -0
  43. package/dist/core-BUpclilG.d.cts +102 -0
  44. package/dist/core-BUpclilG.d.cts.map +1 -0
  45. package/dist/core-DFUj5GtA.d.ts +102 -0
  46. package/dist/core-DFUj5GtA.d.ts.map +1 -0
  47. package/dist/database.cjs +7 -0
  48. package/dist/database.d.cts +4 -0
  49. package/dist/database.d.ts +4 -0
  50. package/dist/database.js +5 -0
  51. package/dist/dictionary-D7l-qFt1.d.cts +316 -0
  52. package/dist/dictionary-D7l-qFt1.d.cts.map +1 -0
  53. package/dist/dictionary-_vzfBLWi.d.ts +316 -0
  54. package/dist/dictionary-_vzfBLWi.d.ts.map +1 -0
  55. package/dist/dictionary-data-util-CHnRdYZ9.cjs +378 -0
  56. package/dist/dictionary-data-util-CHnRdYZ9.cjs.map +1 -0
  57. package/dist/dictionary-data-util-CfOLfEDE.js +323 -0
  58. package/dist/dictionary-data-util-CfOLfEDE.js.map +1 -0
  59. package/dist/dictionary-database-BDC2f9zc.d.ts +58 -0
  60. package/dist/dictionary-database-BDC2f9zc.d.ts.map +1 -0
  61. package/dist/dictionary-database-CU4TsvCC.js +393 -0
  62. package/dist/dictionary-database-CU4TsvCC.js.map +1 -0
  63. package/dist/dictionary-database-DsOi04Sg.d.cts +58 -0
  64. package/dist/dictionary-database-DsOi04Sg.d.cts.map +1 -0
  65. package/dist/dictionary-database-lvFvftnO.cjs +412 -0
  66. package/dist/dictionary-database-lvFvftnO.cjs.map +1 -0
  67. package/dist/dictionary-importer-BkQQSBhm.d.ts +237 -0
  68. package/dist/dictionary-importer-BkQQSBhm.d.ts.map +1 -0
  69. package/dist/dictionary-importer-Cen1z6co.js +1821 -0
  70. package/dist/dictionary-importer-Cen1z6co.js.map +1 -0
  71. package/dist/dictionary-importer-DYmmWmcX.cjs +8 -0
  72. package/dist/dictionary-importer-Da3AuTZw.d.cts +237 -0
  73. package/dist/dictionary-importer-Da3AuTZw.d.cts.map +1 -0
  74. package/dist/dictionary-importer-Dhn75iZ4.cjs +1834 -0
  75. package/dist/dictionary-importer-Dhn75iZ4.cjs.map +1 -0
  76. package/dist/dictionary-importer-xWkel0h-.js +8 -0
  77. package/dist/dictionary-update-checker-BNE4pGTx.js +4 -0
  78. package/dist/dictionary-update-checker-Byjvifd2.cjs +75 -0
  79. package/dist/dictionary-update-checker-Byjvifd2.cjs.map +1 -0
  80. package/dist/dictionary-update-checker-YdpalZ41.cjs +4 -0
  81. package/dist/dictionary-update-checker-kKukiovj.js +69 -0
  82. package/dist/dictionary-update-checker-kKukiovj.js.map +1 -0
  83. package/dist/display-generator-BGVWiI0t.js +746 -0
  84. package/dist/display-generator-BGVWiI0t.js.map +1 -0
  85. package/dist/display-generator-BMQmG5Ov.cjs +9 -0
  86. package/dist/display-generator-BxZ7mBjP.js +9 -0
  87. package/dist/display-generator-DyP-HNzP.cjs +758 -0
  88. package/dist/display-generator-DyP-HNzP.cjs.map +1 -0
  89. package/dist/errors-BSezaJwm.cjs +35 -0
  90. package/dist/errors-BSezaJwm.cjs.map +1 -0
  91. package/dist/errors-DuuDSO5N.js +22 -0
  92. package/dist/errors-DuuDSO5N.js.map +1 -0
  93. package/dist/frequency-ranking-BXjfhhUQ.js +3 -0
  94. package/dist/frequency-ranking-Cx1kkIrw.cjs +3 -0
  95. package/dist/frequency-ranking-DEJMTMdg.js +159 -0
  96. package/dist/frequency-ranking-DEJMTMdg.js.map +1 -0
  97. package/dist/frequency-ranking-DVYxTXN-.cjs +166 -0
  98. package/dist/frequency-ranking-DVYxTXN-.cjs.map +1 -0
  99. package/dist/furigana-5HK97CY8.js +4 -0
  100. package/dist/furigana-9bBI9-qe.d.ts +47 -0
  101. package/dist/furigana-9bBI9-qe.d.ts.map +1 -0
  102. package/dist/furigana-B3-0y231.js +471 -0
  103. package/dist/furigana-B3-0y231.js.map +1 -0
  104. package/dist/furigana-CjOhzvZt.d.cts +47 -0
  105. package/dist/furigana-CjOhzvZt.d.cts.map +1 -0
  106. package/dist/furigana-DpZLcues.cjs +609 -0
  107. package/dist/furigana-DpZLcues.cjs.map +1 -0
  108. package/dist/furigana-h3v2ub4-.cjs +4 -0
  109. package/dist/import.cjs +12 -0
  110. package/dist/import.d.cts +107 -0
  111. package/dist/import.d.cts.map +1 -0
  112. package/dist/import.d.ts +107 -0
  113. package/dist/import.d.ts.map +1 -0
  114. package/dist/import.js +9 -0
  115. package/dist/index.cjs +275 -0
  116. package/dist/index.cjs.map +1 -0
  117. package/dist/index.d.cts +211 -0
  118. package/dist/index.d.cts.map +1 -0
  119. package/dist/index.d.ts +211 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +238 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/json-DGd-cunA.js +17 -0
  124. package/dist/json-DGd-cunA.js.map +1 -0
  125. package/dist/json-DKWp-B7Y.cjs +30 -0
  126. package/dist/json-DKWp-B7Y.cjs.map +1 -0
  127. package/dist/language-KN_u-nTR.d.ts +104 -0
  128. package/dist/language-KN_u-nTR.d.ts.map +1 -0
  129. package/dist/language-xAbQxgXc.d.cts +104 -0
  130. package/dist/language-xAbQxgXc.d.cts.map +1 -0
  131. package/dist/language.cjs +15626 -0
  132. package/dist/language.cjs.map +1 -0
  133. package/dist/language.d.cts +959 -0
  134. package/dist/language.d.cts.map +1 -0
  135. package/dist/language.d.ts +959 -0
  136. package/dist/language.d.ts.map +1 -0
  137. package/dist/language.js +15522 -0
  138. package/dist/language.js.map +1 -0
  139. package/dist/log-D8KtR3aP.cjs +67 -0
  140. package/dist/log-D8KtR3aP.cjs.map +1 -0
  141. package/dist/log-hgSll-dS.js +60 -0
  142. package/dist/log-hgSll-dS.js.map +1 -0
  143. package/dist/lookup.cjs +13 -0
  144. package/dist/lookup.d.cts +161 -0
  145. package/dist/lookup.d.cts.map +1 -0
  146. package/dist/lookup.d.ts +161 -0
  147. package/dist/lookup.d.ts.map +1 -0
  148. package/dist/lookup.js +10 -0
  149. package/dist/media-loader-BABA_E4W.js +3 -0
  150. package/dist/media-loader-Ce9cuANS.cjs +21 -0
  151. package/dist/media-loader-Ce9cuANS.cjs.map +1 -0
  152. package/dist/media-loader-qRti-Q6h.js +14 -0
  153. package/dist/media-loader-qRti-Q6h.js.map +1 -0
  154. package/dist/media-loader-xlUGaJrx.cjs +3 -0
  155. package/dist/multi-language-transformer-AlxOM6b3.js +637 -0
  156. package/dist/multi-language-transformer-AlxOM6b3.js.map +1 -0
  157. package/dist/multi-language-transformer-MdbQBBOt.cjs +685 -0
  158. package/dist/multi-language-transformer-MdbQBBOt.cjs.map +1 -0
  159. package/dist/multi-language-transformer-SEhcJXEB.d.ts +63 -0
  160. package/dist/multi-language-transformer-SEhcJXEB.d.ts.map +1 -0
  161. package/dist/multi-language-transformer-Ul9mbRce.d.cts +63 -0
  162. package/dist/multi-language-transformer-Ul9mbRce.d.cts.map +1 -0
  163. package/dist/pronunciation-generator-BtBc4q_V.js +397 -0
  164. package/dist/pronunciation-generator-BtBc4q_V.js.map +1 -0
  165. package/dist/pronunciation-generator-CBYdXYou.js +4 -0
  166. package/dist/pronunciation-generator-CFbZlf5J.cjs +445 -0
  167. package/dist/pronunciation-generator-CFbZlf5J.cjs.map +1 -0
  168. package/dist/pronunciation-generator-DOz9hEuk.cjs +4 -0
  169. package/dist/render.cjs +2796 -0
  170. package/dist/render.cjs.map +1 -0
  171. package/dist/render.d.cts +424 -0
  172. package/dist/render.d.cts.map +1 -0
  173. package/dist/render.d.ts +424 -0
  174. package/dist/render.d.ts.map +1 -0
  175. package/dist/render.js +2777 -0
  176. package/dist/render.js.map +1 -0
  177. package/dist/sentence-parser-BPAJNzqW.js +126 -0
  178. package/dist/sentence-parser-BPAJNzqW.js.map +1 -0
  179. package/dist/sentence-parser-BVIOI64h.cjs +132 -0
  180. package/dist/sentence-parser-BVIOI64h.cjs.map +1 -0
  181. package/dist/sentence-parser-BoHO3cHn.js +5 -0
  182. package/dist/sentence-parser-DQVLSW0z.cjs +5 -0
  183. package/dist/structured-content-generator-BtOApkTW.cjs +4 -0
  184. package/dist/structured-content-generator-Bx62RYa8.js +4 -0
  185. package/dist/structured-content-generator-CLnybumI.js +276 -0
  186. package/dist/structured-content-generator-CLnybumI.js.map +1 -0
  187. package/dist/structured-content-generator-DrwkB0-k.cjs +282 -0
  188. package/dist/structured-content-generator-DrwkB0-k.cjs.map +1 -0
  189. package/dist/text-utilities-B7PIythe.js +8 -0
  190. package/dist/text-utilities-B7PIythe.js.map +1 -0
  191. package/dist/text-utilities-Del2Ivkg.cjs +15 -0
  192. package/dist/text-utilities-Del2Ivkg.cjs.map +1 -0
  193. package/dist/translator-CRPlPzqi.cjs +1545 -0
  194. package/dist/translator-CRPlPzqi.cjs.map +1 -0
  195. package/dist/translator-CWgG5drA.js +1539 -0
  196. package/dist/translator-CWgG5drA.js.map +1 -0
  197. package/dist/translator-CaGtJvnQ.cjs +6 -0
  198. package/dist/translator-Cc6OGxrW.d.ts +180 -0
  199. package/dist/translator-Cc6OGxrW.d.ts.map +1 -0
  200. package/dist/translator-CcA-s-W4.d.cts +180 -0
  201. package/dist/translator-CcA-s-W4.d.cts.map +1 -0
  202. package/dist/translator-CuJOTK6l.js +6 -0
  203. package/dist/utilities-C-lbZaJE.cjs +52 -0
  204. package/dist/utilities-C-lbZaJE.cjs.map +1 -0
  205. package/dist/utilities-bi3EF-q5.js +33 -0
  206. package/dist/utilities-bi3EF-q5.js.map +1 -0
  207. package/package.json +102 -0
package/dist/index.js ADDED
@@ -0,0 +1,238 @@
1
+ import { log } from "./log-hgSll-dS.js";
2
+ import "./utilities-bi3EF-q5.js";
3
+ import { DictionaryDB, YomitanDatabase } from "./dictionary-database-CU4TsvCC.js";
4
+ import "./cjk-util-DubXBGDG.js";
5
+ import { MultiLanguageTransformer, getAllLanguageTextProcessors, getLanguageSummaries, isTextLookupWorthy } from "./multi-language-transformer-AlxOM6b3.js";
6
+ import { YomitanError, toError } from "./errors-DuuDSO5N.js";
7
+
8
+ //#region src/util/event-dispatcher.ts
9
+ /**
10
+ * Base class that controls basic event dispatching.
11
+ */
12
+ var EventDispatcher = class {
13
+ _eventMap;
14
+ constructor() {
15
+ this._eventMap = new Map();
16
+ }
17
+ trigger(eventName, details) {
18
+ const callbacks = this._eventMap.get(eventName);
19
+ if (typeof callbacks === "undefined") return false;
20
+ for (const callback of callbacks) callback(details);
21
+ return true;
22
+ }
23
+ on(eventName, callback) {
24
+ let callbacks = this._eventMap.get(eventName);
25
+ if (typeof callbacks === "undefined") {
26
+ callbacks = [];
27
+ this._eventMap.set(eventName, callbacks);
28
+ }
29
+ callbacks.push(callback);
30
+ }
31
+ off(eventName, callback) {
32
+ const callbacks = this._eventMap.get(eventName);
33
+ if (typeof callbacks === "undefined") return false;
34
+ const ii = callbacks.length;
35
+ for (let i = 0; i < ii; ++i) if (callbacks[i] === callback) {
36
+ callbacks.splice(i, 1);
37
+ if (callbacks.length === 0) this._eventMap.delete(eventName);
38
+ return true;
39
+ }
40
+ return false;
41
+ }
42
+ hasListeners(eventName) {
43
+ const callbacks = this._eventMap.get(eventName);
44
+ return typeof callbacks !== "undefined" && callbacks.length > 0;
45
+ }
46
+ };
47
+
48
+ //#endregion
49
+ //#region src/index.ts
50
+ var YomitanCore = class {
51
+ _db;
52
+ _multiLanguageTransformer;
53
+ _translator = null;
54
+ _sentenceParser = null;
55
+ _batchProcessor = null;
56
+ _frequencyRanker = null;
57
+ _initialized = false;
58
+ _config;
59
+ constructor(config) {
60
+ this._config = {
61
+ databaseName: config?.databaseName ?? "dict",
62
+ initLanguage: config?.initLanguage ?? true
63
+ };
64
+ this._db = new DictionaryDB(this._config.databaseName);
65
+ this._multiLanguageTransformer = new MultiLanguageTransformer();
66
+ }
67
+ async initialize() {
68
+ if (this._initialized) return;
69
+ await this._db.open();
70
+ if (this._config.initLanguage) this._multiLanguageTransformer.prepare();
71
+ this._initialized = true;
72
+ }
73
+ async dispose() {
74
+ if (!this._initialized) return;
75
+ this._db.close();
76
+ this._translator = null;
77
+ this._sentenceParser = null;
78
+ this._batchProcessor = null;
79
+ this._frequencyRanker = null;
80
+ this._initialized = false;
81
+ }
82
+ get isReady() {
83
+ return this._initialized;
84
+ }
85
+ get database() {
86
+ this._ensureInitialized();
87
+ return this._db;
88
+ }
89
+ async getTranslator() {
90
+ this._ensureInitialized();
91
+ if (!this._translator) {
92
+ const { Translator } = await import("./translator-CuJOTK6l.js");
93
+ this._translator = new Translator(this._db);
94
+ this._translator.prepare();
95
+ }
96
+ return this._translator;
97
+ }
98
+ get language() {
99
+ return {
100
+ summaries: getLanguageSummaries(),
101
+ textProcessors: getAllLanguageTextProcessors(),
102
+ transformer: this._multiLanguageTransformer,
103
+ isTextLookupWorthy
104
+ };
105
+ }
106
+ async importDictionary(archive, options) {
107
+ this._ensureInitialized();
108
+ const { DictionaryImporterClass: DictionaryImporter } = await import("./dictionary-importer-xWkel0h-.js");
109
+ const { NoOpMediaLoader } = await import("./media-loader-BABA_E4W.js");
110
+ const importer = new DictionaryImporter(new NoOpMediaLoader(), options?.onProgress);
111
+ const details = {
112
+ prefixWildcardsSupported: options?.prefixWildcardsSupported ?? false,
113
+ yomitanVersion: options?.yomitanVersion ?? "0.0.0"
114
+ };
115
+ return await importer.importDictionary(this._db, archive, details);
116
+ }
117
+ async deleteDictionary(name, onProgress) {
118
+ this._ensureInitialized();
119
+ await this._db.deleteDictionary(name, onProgress);
120
+ }
121
+ async getDictionaryInfo() {
122
+ this._ensureInitialized();
123
+ return await this._db.getDictionaryInfo();
124
+ }
125
+ async findTerms(text, config) {
126
+ this._ensureInitialized();
127
+ const translator = await this.getTranslator();
128
+ const mode = config.mode ?? "group";
129
+ const findOptions = {
130
+ matchType: config.options?.matchType ?? "exact",
131
+ deinflect: config.options?.deinflect ?? true,
132
+ primaryReading: config.options?.primaryReading ?? "",
133
+ mainDictionary: config.options?.mainDictionary ?? "",
134
+ sortFrequencyDictionary: config.options?.sortFrequencyDictionary ?? null,
135
+ sortFrequencyDictionaryOrder: config.options?.sortFrequencyDictionaryOrder ?? "descending",
136
+ removeNonJapaneseCharacters: config.options?.removeNonJapaneseCharacters ?? false,
137
+ textReplacements: config.options?.textReplacements ?? [null],
138
+ enabledDictionaryMap: config.enabledDictionaryMap,
139
+ excludeDictionaryDefinitions: config.options?.excludeDictionaryDefinitions ?? null,
140
+ searchResolution: config.options?.searchResolution ?? "letter",
141
+ language: config.language ?? "ja"
142
+ };
143
+ const { dictionaryEntries, originalTextLength } = await translator.findTerms(mode, text, findOptions);
144
+ return {
145
+ entries: dictionaryEntries,
146
+ originalTextLength
147
+ };
148
+ }
149
+ async findKanji(text, config) {
150
+ this._ensureInitialized();
151
+ const translator = await this.getTranslator();
152
+ const findOptions = {
153
+ enabledDictionaryMap: config.enabledDictionaryMap,
154
+ removeNonJapaneseCharacters: config.removeNonJapaneseCharacters ?? true
155
+ };
156
+ return await translator.findKanji(text, findOptions);
157
+ }
158
+ async parseText(text, options) {
159
+ this._ensureInitialized();
160
+ if (!this._sentenceParser) {
161
+ const translator = await this.getTranslator();
162
+ const { SentenceParser } = await import("./sentence-parser-BoHO3cHn.js");
163
+ this._sentenceParser = new SentenceParser(translator);
164
+ }
165
+ return await this._sentenceParser.parseText(text, options.language ?? "ja", {
166
+ enabledDictionaryMap: options.enabledDictionaryMap,
167
+ maxLength: options.maxLength
168
+ });
169
+ }
170
+ async generateFurigana(text, reading) {
171
+ const { generateFurigana } = await import("./furigana-5HK97CY8.js");
172
+ return generateFurigana(text, reading);
173
+ }
174
+ async batchLookup(texts, config) {
175
+ this._ensureInitialized();
176
+ if (!this._batchProcessor) {
177
+ const translator = await this.getTranslator();
178
+ const { BatchProcessor } = await import("./batch-processor-Quo9jUyf.js");
179
+ this._batchProcessor = new BatchProcessor(translator);
180
+ }
181
+ const results = await this._batchProcessor.batchLookup(texts, {
182
+ language: config.language,
183
+ enabledDictionaryMap: config.enabledDictionaryMap,
184
+ concurrency: config.concurrency
185
+ });
186
+ const mapped = new Map();
187
+ for (const [key, value] of results) mapped.set(key, {
188
+ entries: value.entries,
189
+ originalTextLength: value.originalTextLength
190
+ });
191
+ return mapped;
192
+ }
193
+ async getFrequencyRanking(term, dictionaries, reading) {
194
+ this._ensureInitialized();
195
+ if (!this._frequencyRanker) {
196
+ const { FrequencyRanker } = await import("./frequency-ranking-BXjfhhUQ.js");
197
+ this._frequencyRanker = new FrequencyRanker(this._db);
198
+ }
199
+ return await this._frequencyRanker.getFrequencyRanking(term, dictionaries, reading);
200
+ }
201
+ async checkForUpdates(names) {
202
+ this._ensureInitialized();
203
+ const { DictionaryUpdateChecker } = await import("./dictionary-update-checker-BNE4pGTx.js");
204
+ const checker = new DictionaryUpdateChecker(this._db);
205
+ return await checker.checkForUpdates(names);
206
+ }
207
+ async getAudioUrls(term, reading, sources, languageSummary) {
208
+ const { AudioUrlGenerator } = await import("./audio-url-generator-Qi0rfzHz.js");
209
+ const generator = new AudioUrlGenerator();
210
+ return await generator.getUrls(term, reading, sources, languageSummary);
211
+ }
212
+ async createAnkiClient(config) {
213
+ const { AnkiConnect } = await import("./anki-connect-CPPuhyiQ.js");
214
+ return new AnkiConnect(config);
215
+ }
216
+ async createRenderer() {
217
+ const displayGen = await import("./display-generator-BxZ7mBjP.js");
218
+ const structuredGen = await import("./structured-content-generator-Bx62RYa8.js");
219
+ const pronunciationGen = await import("./pronunciation-generator-CBYdXYou.js");
220
+ return {
221
+ DisplayGenerator: displayGen.DisplayGenerator,
222
+ StructuredContentGenerator: structuredGen.StructuredContentGenerator,
223
+ PronunciationGenerator: pronunciationGen.PronunciationGenerator
224
+ };
225
+ }
226
+ async createAudioUrlGenerator() {
227
+ const { AudioUrlGenerator } = await import("./audio-url-generator-Qi0rfzHz.js");
228
+ return new AudioUrlGenerator();
229
+ }
230
+ _ensureInitialized() {
231
+ if (!this._initialized) throw new Error("YomitanCore is not initialized. Call initialize() first.");
232
+ }
233
+ };
234
+ var src_default = YomitanCore;
235
+
236
+ //#endregion
237
+ export { DictionaryDB, EventDispatcher, YomitanCore, YomitanDatabase, YomitanError, src_default as default, log, toError };
238
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["eventName: TName","details: EventArgument<TSurface, TName>","callback: EventHandler<TSurface, TName>","config?: YomitanCoreConfig","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<string, { index: number; priority: number }>;\n maxLength?: number;\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<string, { index: number; priority: number }>;\n maxLength?: number;\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 maxLength: options.maxLength,\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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"}
@@ -0,0 +1,17 @@
1
+ //#region src/util/json.ts
2
+ /**
3
+ * Safe JSON.parse wrapper that returns unknown instead of any.
4
+ */
5
+ function parseJson(value) {
6
+ return JSON.parse(value);
7
+ }
8
+ /**
9
+ * Safe Response.json wrapper.
10
+ */
11
+ async function readResponseJson(response) {
12
+ return await response.json();
13
+ }
14
+
15
+ //#endregion
16
+ export { parseJson, readResponseJson };
17
+ //# sourceMappingURL=json-DGd-cunA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-DGd-cunA.js","names":["value: string","response: Response"],"sources":["../src/util/json.ts"],"sourcesContent":["/**\n * Safe JSON.parse wrapper that returns unknown instead of any.\n */\nexport function parseJson<T = unknown>(value: string): T {\n return JSON.parse(value) as T;\n}\n\n/**\n * Safe Response.json wrapper.\n */\nexport async function readResponseJson<T = unknown>(response: Response): Promise<T> {\n return (await response.json()) as T;\n}\n"],"mappings":";;;;AAGA,SAAgB,UAAuBA,OAAkB;AACrD,QAAO,KAAK,MAAM,MAAM;AAC3B;;;;AAKD,eAAsB,iBAA8BC,UAAgC;AAChF,QAAQ,MAAM,SAAS,MAAM;AAChC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ //#region src/util/json.ts
4
+ /**
5
+ * Safe JSON.parse wrapper that returns unknown instead of any.
6
+ */
7
+ function parseJson(value) {
8
+ return JSON.parse(value);
9
+ }
10
+ /**
11
+ * Safe Response.json wrapper.
12
+ */
13
+ async function readResponseJson(response) {
14
+ return await response.json();
15
+ }
16
+
17
+ //#endregion
18
+ Object.defineProperty(exports, 'parseJson', {
19
+ enumerable: true,
20
+ get: function () {
21
+ return parseJson;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, 'readResponseJson', {
25
+ enumerable: true,
26
+ get: function () {
27
+ return readResponseJson;
28
+ }
29
+ });
30
+ //# sourceMappingURL=json-DKWp-B7Y.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-DKWp-B7Y.cjs","names":["value: string","response: Response"],"sources":["../src/util/json.ts"],"sourcesContent":["/**\n * Safe JSON.parse wrapper that returns unknown instead of any.\n */\nexport function parseJson<T = unknown>(value: string): T {\n return JSON.parse(value) as T;\n}\n\n/**\n * Safe Response.json wrapper.\n */\nexport async function readResponseJson<T = unknown>(response: Response): Promise<T> {\n return (await response.json()) as T;\n}\n"],"mappings":";;;;;;AAGA,SAAgB,UAAuBA,OAAkB;AACrD,QAAO,KAAK,MAAM,MAAM;AAC3B;;;;AAKD,eAAsB,iBAA8BC,UAAgC;AAChF,QAAQ,MAAM,SAAS,MAAM;AAChC"}
@@ -0,0 +1,104 @@
1
+ //#region src/types/language-transformer.d.ts
2
+ type LanguageTransformDescriptor<TCondition extends string = string> = {
3
+ language: string;
4
+ conditions: ConditionMapObject<TCondition>;
5
+ transforms: TransformMapObject<TCondition>;
6
+ };
7
+ type ConditionMapObject<TCondition extends string> = { [type in TCondition]: Condition };
8
+ type TransformMapObject<TCondition> = {
9
+ [name: string]: Transform<TCondition>;
10
+ };
11
+ type ConditionMapEntry = [type: string, condition: Condition];
12
+ type ConditionMapEntries = ConditionMapEntry[];
13
+ type Condition = {
14
+ name: string;
15
+ isDictionaryForm: boolean;
16
+ i18n?: RuleI18n[];
17
+ subConditions?: string[];
18
+ };
19
+ type RuleI18n = {
20
+ language: string;
21
+ name: string;
22
+ };
23
+ type Transform<TCondition> = {
24
+ name: string;
25
+ description?: string;
26
+ i18n?: TransformI18n[];
27
+ rules: Rule<TCondition>[];
28
+ };
29
+ type TransformI18n = {
30
+ language: string;
31
+ name: string;
32
+ description?: string;
33
+ };
34
+ type DeinflectFunction = (inflectedWord: string) => string;
35
+ type Rule<TCondition = string> = {
36
+ type: 'suffix' | 'prefix' | 'wholeWord' | 'other';
37
+ isInflected: RegExp;
38
+ deinflect: DeinflectFunction;
39
+ conditionsIn: TCondition[];
40
+ conditionsOut: TCondition[];
41
+ };
42
+ type SuffixRule<TCondition = string> = {
43
+ type: 'suffix';
44
+ isInflected: RegExp;
45
+ deinflected: string;
46
+ deinflect: DeinflectFunction;
47
+ conditionsIn: TCondition[];
48
+ conditionsOut: TCondition[];
49
+ }; //#endregion
50
+ //#region src/types/language.d.ts
51
+
52
+ //# sourceMappingURL=language-transformer.d.ts.map
53
+ type TextProcessorOptions<T = unknown> = T[];
54
+ type TextProcessorFunction<T = unknown> = (str: string, setting: T) => string;
55
+ type TextProcessor<T = unknown> = {
56
+ name: string;
57
+ description: string;
58
+ options: TextProcessorOptions<T>;
59
+ process: TextProcessorFunction<T>;
60
+ };
61
+ type ReadingNormalizer = (str: string) => string;
62
+ type BidirectionalPreprocessorOptions = 'off' | 'direct' | 'inverse';
63
+ type BidirectionalConversionPreprocessor = TextProcessor<BidirectionalPreprocessorOptions>;
64
+ type LanguageAndProcessors = {
65
+ iso: string;
66
+ textPreprocessors?: TextProcessorWithId<unknown>[];
67
+ textPostprocessors?: TextProcessorWithId<unknown>[];
68
+ };
69
+ type LanguageAndReadingNormalizer = {
70
+ iso: string;
71
+ readingNormalizer: ReadingNormalizer;
72
+ };
73
+ type LanguageAndTransforms = {
74
+ iso: string;
75
+ languageTransforms: LanguageTransformDescriptor;
76
+ };
77
+ type TextProcessorWithId<T = unknown> = {
78
+ id: string;
79
+ textProcessor: TextProcessor<T>;
80
+ };
81
+ type LanguageSummary = {
82
+ name: string;
83
+ iso: string;
84
+ iso639_3: string;
85
+ exampleText: string;
86
+ };
87
+ type IsTextLookupWorthyFunction = (text: string) => boolean;
88
+ type LanguageDescriptorAny = {
89
+ iso: string;
90
+ iso639_3: string;
91
+ name: string;
92
+ exampleText: string;
93
+ isTextLookupWorthy?: IsTextLookupWorthyFunction;
94
+ readingNormalizer?: ReadingNormalizer;
95
+ textPreprocessors?: Record<string, TextProcessor<any>>;
96
+ textPostprocessors?: Record<string, TextProcessor<any>>;
97
+ languageTransforms?: LanguageTransformDescriptor;
98
+ };
99
+
100
+ //#endregion
101
+ //# sourceMappingURL=language.d.ts.map
102
+
103
+ export { 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 };
104
+ //# sourceMappingURL=language-KN_u-nTR.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-KN_u-nTR.d.ts","names":[],"sources":["../src/types/language-transformer.ts","../src/types/language.ts"],"sourcesContent":null,"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ //#region src/types/language-transformer.d.ts
2
+ type LanguageTransformDescriptor<TCondition extends string = string> = {
3
+ language: string;
4
+ conditions: ConditionMapObject<TCondition>;
5
+ transforms: TransformMapObject<TCondition>;
6
+ };
7
+ type ConditionMapObject<TCondition extends string> = { [type in TCondition]: Condition };
8
+ type TransformMapObject<TCondition> = {
9
+ [name: string]: Transform<TCondition>;
10
+ };
11
+ type ConditionMapEntry = [type: string, condition: Condition];
12
+ type ConditionMapEntries = ConditionMapEntry[];
13
+ type Condition = {
14
+ name: string;
15
+ isDictionaryForm: boolean;
16
+ i18n?: RuleI18n[];
17
+ subConditions?: string[];
18
+ };
19
+ type RuleI18n = {
20
+ language: string;
21
+ name: string;
22
+ };
23
+ type Transform<TCondition> = {
24
+ name: string;
25
+ description?: string;
26
+ i18n?: TransformI18n[];
27
+ rules: Rule<TCondition>[];
28
+ };
29
+ type TransformI18n = {
30
+ language: string;
31
+ name: string;
32
+ description?: string;
33
+ };
34
+ type DeinflectFunction = (inflectedWord: string) => string;
35
+ type Rule<TCondition = string> = {
36
+ type: 'suffix' | 'prefix' | 'wholeWord' | 'other';
37
+ isInflected: RegExp;
38
+ deinflect: DeinflectFunction;
39
+ conditionsIn: TCondition[];
40
+ conditionsOut: TCondition[];
41
+ };
42
+ type SuffixRule<TCondition = string> = {
43
+ type: 'suffix';
44
+ isInflected: RegExp;
45
+ deinflected: string;
46
+ deinflect: DeinflectFunction;
47
+ conditionsIn: TCondition[];
48
+ conditionsOut: TCondition[];
49
+ }; //#endregion
50
+ //#region src/types/language.d.ts
51
+
52
+ //# sourceMappingURL=language-transformer.d.ts.map
53
+ type TextProcessorOptions<T = unknown> = T[];
54
+ type TextProcessorFunction<T = unknown> = (str: string, setting: T) => string;
55
+ type TextProcessor<T = unknown> = {
56
+ name: string;
57
+ description: string;
58
+ options: TextProcessorOptions<T>;
59
+ process: TextProcessorFunction<T>;
60
+ };
61
+ type ReadingNormalizer = (str: string) => string;
62
+ type BidirectionalPreprocessorOptions = 'off' | 'direct' | 'inverse';
63
+ type BidirectionalConversionPreprocessor = TextProcessor<BidirectionalPreprocessorOptions>;
64
+ type LanguageAndProcessors = {
65
+ iso: string;
66
+ textPreprocessors?: TextProcessorWithId<unknown>[];
67
+ textPostprocessors?: TextProcessorWithId<unknown>[];
68
+ };
69
+ type LanguageAndReadingNormalizer = {
70
+ iso: string;
71
+ readingNormalizer: ReadingNormalizer;
72
+ };
73
+ type LanguageAndTransforms = {
74
+ iso: string;
75
+ languageTransforms: LanguageTransformDescriptor;
76
+ };
77
+ type TextProcessorWithId<T = unknown> = {
78
+ id: string;
79
+ textProcessor: TextProcessor<T>;
80
+ };
81
+ type LanguageSummary = {
82
+ name: string;
83
+ iso: string;
84
+ iso639_3: string;
85
+ exampleText: string;
86
+ };
87
+ type IsTextLookupWorthyFunction = (text: string) => boolean;
88
+ type LanguageDescriptorAny = {
89
+ iso: string;
90
+ iso639_3: string;
91
+ name: string;
92
+ exampleText: string;
93
+ isTextLookupWorthy?: IsTextLookupWorthyFunction;
94
+ readingNormalizer?: ReadingNormalizer;
95
+ textPreprocessors?: Record<string, TextProcessor<any>>;
96
+ textPostprocessors?: Record<string, TextProcessor<any>>;
97
+ languageTransforms?: LanguageTransformDescriptor;
98
+ };
99
+
100
+ //#endregion
101
+ //# sourceMappingURL=language.d.ts.map
102
+
103
+ export { 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 };
104
+ //# sourceMappingURL=language-xAbQxgXc.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-xAbQxgXc.d.cts","names":[],"sources":["../src/types/language-transformer.ts","../src/types/language.ts"],"sourcesContent":null,"mappings":"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"}