@read-frog/definitions 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,1546 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/constants/app.ts
4
+ const APP_NAME = "Read Frog";
5
+
6
+ //#endregion
7
+ //#region src/constants/auth.ts
8
+ const AUTH_BASE_PATH = "/api/identity";
9
+ const AUTH_COOKIE_PATTERNS = ["better-auth.session_token"];
10
+
11
+ //#endregion
12
+ //#region src/constants/dictionary.ts
13
+ const LANG_DICTIONARY_LABELS = {
14
+ "eng": {
15
+ pronunciation: "IPA",
16
+ partOfSpeech: "Part of Speech",
17
+ definition: "Definition",
18
+ exampleSentence: "Example Sentence",
19
+ extendedVocabulary: "Extended Vocabulary",
20
+ synonyms: "Synonyms",
21
+ antonyms: "Antonyms",
22
+ root: "Root",
23
+ grammarPoint: "Grammar Point",
24
+ explanation: "Explanation",
25
+ uniqueAttributes: `{% if existed %}
26
+ ## Phrasal Verb
27
+ {{phrasal verb forms and meanings}}
28
+ {% end if %}`
29
+ },
30
+ "cmn": {
31
+ pronunciation: "拼音",
32
+ partOfSpeech: "词性",
33
+ definition: "释义",
34
+ exampleSentence: "例句",
35
+ extendedVocabulary: "扩展词汇",
36
+ synonyms: "近义词",
37
+ antonyms: "反义词",
38
+ root: "词根",
39
+ grammarPoint: "语法点",
40
+ explanation: "讲解",
41
+ uniqueAttributes: ""
42
+ },
43
+ "cmn-Hant": {
44
+ pronunciation: "拼音/注音符號",
45
+ partOfSpeech: "詞性",
46
+ definition: "釋義",
47
+ exampleSentence: "例句",
48
+ extendedVocabulary: "擴展詞彙",
49
+ synonyms: "近義詞",
50
+ antonyms: "反義詞",
51
+ root: "詞根",
52
+ grammarPoint: "語法點",
53
+ explanation: "講解",
54
+ uniqueAttributes: ""
55
+ },
56
+ "yue": {
57
+ pronunciation: "香港語言學學會粵語拼音",
58
+ partOfSpeech: "詞性",
59
+ definition: "釋義",
60
+ exampleSentence: "例句",
61
+ extendedVocabulary: "擴展詞彙",
62
+ synonyms: "近義詞",
63
+ antonyms: "反義詞",
64
+ root: "詞根",
65
+ grammarPoint: "語法點",
66
+ explanation: "講解",
67
+ uniqueAttributes: ""
68
+ },
69
+ "spa": {
70
+ pronunciation: "IPA",
71
+ partOfSpeech: "Categoría Gramatical",
72
+ definition: "Definición",
73
+ exampleSentence: "Oración de Ejemplo",
74
+ extendedVocabulary: "Vocabulario Extendido",
75
+ synonyms: "Sinónimos",
76
+ antonyms: "Antónimos",
77
+ root: "Raíz",
78
+ grammarPoint: "Punto Gramatical",
79
+ explanation: "Explicación",
80
+ uniqueAttributes: `{% if existed %}
81
+ ## Género
82
+ {{masculino / femenino}}
83
+ {% end if %}`
84
+ },
85
+ "rus": {
86
+ pronunciation: "Романизация",
87
+ partOfSpeech: "Часть речи",
88
+ definition: "Определение",
89
+ exampleSentence: "Пример предложения",
90
+ extendedVocabulary: "Расширенный словарь",
91
+ synonyms: "Синонимы",
92
+ antonyms: "Антонимы",
93
+ root: "Корень",
94
+ grammarPoint: "Грамматика",
95
+ explanation: "Объяснение",
96
+ uniqueAttributes: `{% if existed %}
97
+ ## Падеж
98
+ {{именительный/родительный/дательный/винительный/творительный/предложный}}
99
+ {% end if %}`
100
+ },
101
+ "arb": {
102
+ pronunciation: "حروف لاتينية",
103
+ partOfSpeech: "جزء من الكلام",
104
+ definition: "تعريف",
105
+ exampleSentence: "جملة مثال",
106
+ extendedVocabulary: "مفردات موسعة",
107
+ synonyms: "مرادفات",
108
+ antonyms: "أضداد",
109
+ root: "الجذر",
110
+ grammarPoint: "نقطة نحوية",
111
+ explanation: "شرح",
112
+ uniqueAttributes: `{% if existed %}
113
+ ## الجذر الثلاثي
114
+ {{الجذر والوزن}}
115
+ {% end if %}`
116
+ },
117
+ "ben": {
118
+ pronunciation: "রোমানাইজেশন",
119
+ partOfSpeech: "শব্দের প্রকার",
120
+ definition: "সংজ্ঞা",
121
+ exampleSentence: "উদাহরণ বাক্য",
122
+ extendedVocabulary: "সম্প্রসারিত শব্দভাণ্ডার",
123
+ synonyms: "সমার্থক শব্দ",
124
+ antonyms: "বিপরীত শব্দ",
125
+ root: "মূল",
126
+ grammarPoint: "ব্যাকরণ পয়েন্ট",
127
+ explanation: "ব্যাখ্যা",
128
+ uniqueAttributes: ""
129
+ },
130
+ "hin": {
131
+ pronunciation: "रोमनकरण",
132
+ partOfSpeech: "शब्द भेद",
133
+ definition: "परिभाषा",
134
+ exampleSentence: "उदाहरण वाक्य",
135
+ extendedVocabulary: "विस्तारित शब्दावली",
136
+ synonyms: "समानार्थी शब्द",
137
+ antonyms: "विलोम शब्द",
138
+ root: "मूल",
139
+ grammarPoint: "व्याकरण बिंदु",
140
+ explanation: "व्याख्या",
141
+ uniqueAttributes: ""
142
+ },
143
+ "por": {
144
+ pronunciation: "IPA",
145
+ partOfSpeech: "Classe Gramatical",
146
+ definition: "Definição",
147
+ exampleSentence: "Frase de Exemplo",
148
+ extendedVocabulary: "Vocabulário Estendido",
149
+ synonyms: "Sinónimos",
150
+ antonyms: "Antónimos",
151
+ root: "Raiz",
152
+ grammarPoint: "Ponto Gramatical",
153
+ explanation: "Explicação",
154
+ uniqueAttributes: `{% if existed %}
155
+ ## Gênero
156
+ {{masculino / feminino}}
157
+ {% end if %}`
158
+ },
159
+ "ind": {
160
+ pronunciation: "IPA",
161
+ partOfSpeech: "Kelas Kata",
162
+ definition: "Definisi",
163
+ exampleSentence: "Contoh Kalimat",
164
+ extendedVocabulary: "Kosakata Diperluas",
165
+ synonyms: "Sinonim",
166
+ antonyms: "Antonim",
167
+ root: "Akar Kata",
168
+ grammarPoint: "Poin Tata Bahasa",
169
+ explanation: "Penjelasan",
170
+ uniqueAttributes: ""
171
+ },
172
+ "jpn": {
173
+ pronunciation: "平仮名",
174
+ partOfSpeech: "品詞",
175
+ definition: "定義",
176
+ exampleSentence: "例文",
177
+ extendedVocabulary: "拡張語彙",
178
+ synonyms: "類義語",
179
+ antonyms: "対義語",
180
+ root: "語根",
181
+ grammarPoint: "文法ポイント",
182
+ explanation: "解説",
183
+ uniqueAttributes: `{% if existed %}
184
+ ## 動詞活用
185
+ {{ます形|て形|辞書形|た形|ない形|可能形}}
186
+ {% end if %}`
187
+ },
188
+ "fra": {
189
+ pronunciation: "IPA",
190
+ partOfSpeech: "Classe Grammaticale",
191
+ definition: "Définition",
192
+ exampleSentence: "Phrase d'Exemple",
193
+ extendedVocabulary: "Vocabulaire Étendu",
194
+ synonyms: "Synonymes",
195
+ antonyms: "Antonymes",
196
+ root: "Racine",
197
+ grammarPoint: "Point de Grammaire",
198
+ explanation: "Explication",
199
+ uniqueAttributes: `{% if existed %}
200
+ ## Genre
201
+ {{masculin / féminin}}
202
+ {% end if %}`
203
+ },
204
+ "deu": {
205
+ pronunciation: "IPA",
206
+ partOfSpeech: "Wortart",
207
+ definition: "Definition",
208
+ exampleSentence: "Beispielsatz",
209
+ extendedVocabulary: "Erweiterter Wortschatz",
210
+ synonyms: "Synonyme",
211
+ antonyms: "Antonyme",
212
+ root: "Wortwurzel",
213
+ grammarPoint: "Grammatikpunkt",
214
+ explanation: "Erklärung",
215
+ uniqueAttributes: `{% if existed %}
216
+ ## Genus und Kasus
217
+ {{maskulin/feminin/neutral; Nominativ/Genitiv/Dativ/Akkusativ}}
218
+ {% end if %}`
219
+ },
220
+ "jav": {
221
+ pronunciation: "Romanisasi",
222
+ partOfSpeech: "Jinising Tembung",
223
+ definition: "Dhefinisi",
224
+ exampleSentence: "Ukara Conto",
225
+ extendedVocabulary: "Kosakata Tambahan",
226
+ synonyms: "Sinonim",
227
+ antonyms: "Antonim",
228
+ root: "Tembung Dhasar",
229
+ grammarPoint: "Poin Tata Basa",
230
+ explanation: "Katerangan",
231
+ uniqueAttributes: ""
232
+ },
233
+ "kor": {
234
+ pronunciation: "로마자 표기법",
235
+ partOfSpeech: "품사",
236
+ definition: "정의",
237
+ exampleSentence: "예문",
238
+ extendedVocabulary: "확장 어휘",
239
+ synonyms: "유의어",
240
+ antonyms: "반의어",
241
+ root: "어근",
242
+ grammarPoint: "문법 포인트",
243
+ explanation: "설명",
244
+ uniqueAttributes: `{% if existed %}
245
+ ## 동사 활용
246
+ {{어간·어미 변화, 시제·높임·연결 형태}}
247
+ {% end if %}`
248
+ },
249
+ "tel": {
250
+ pronunciation: "రోమనీకరణ",
251
+ partOfSpeech: "పదం రకం",
252
+ definition: "నిర్వచనం",
253
+ exampleSentence: "ఉదాహరణ వాక్యం",
254
+ extendedVocabulary: "విస్తరించిన పదజాలం",
255
+ synonyms: "పర్యాయపదాలు",
256
+ antonyms: "వ్యతిరేక పదాలు",
257
+ root: "మూలం",
258
+ grammarPoint: "వ్యాకరణ అంశం",
259
+ explanation: "వివరణ",
260
+ uniqueAttributes: ""
261
+ },
262
+ "vie": {
263
+ pronunciation: "Phiên Âm",
264
+ partOfSpeech: "Từ Loại",
265
+ definition: "Định Nghĩa",
266
+ exampleSentence: "Câu Ví Dụ",
267
+ extendedVocabulary: "Từ Vựng Mở Rộng",
268
+ synonyms: "Từ Đồng Nghĩa",
269
+ antonyms: "Từ Trái Nghĩa",
270
+ root: "Gốc Từ",
271
+ grammarPoint: "Điểm Ngữ Pháp",
272
+ explanation: "Giải Thích",
273
+ uniqueAttributes: ""
274
+ },
275
+ "mar": {
276
+ pronunciation: "रोमनकरण",
277
+ partOfSpeech: "शब्दप्रकार",
278
+ definition: "व्याख्या",
279
+ exampleSentence: "उदाहरण वाक्य",
280
+ extendedVocabulary: "विस्तारित शब्दसंग्रह",
281
+ synonyms: "समानार्थी शब्द",
282
+ antonyms: "विरुद्धार्थी शब्द",
283
+ root: "मूळ",
284
+ grammarPoint: "व्याकरण बिंदु",
285
+ explanation: "स्पष्टीकरण",
286
+ uniqueAttributes: ""
287
+ },
288
+ "ita": {
289
+ pronunciation: "IPA",
290
+ partOfSpeech: "Categoria Grammaticale",
291
+ definition: "Definizione",
292
+ exampleSentence: "Frase di Esempio",
293
+ extendedVocabulary: "Vocabolario Esteso",
294
+ synonyms: "Sinonimi",
295
+ antonyms: "Contrari",
296
+ root: "Radice",
297
+ grammarPoint: "Punto Grammaticale",
298
+ explanation: "Spiegazione",
299
+ uniqueAttributes: `{% if existed %}
300
+ ## Genere
301
+ {{maschile / femminile}}
302
+ {% end if %}`
303
+ },
304
+ "tam": {
305
+ pronunciation: "இலத்தீன் எழுத்துமுறை",
306
+ partOfSpeech: "சொல் வகை",
307
+ definition: "வரையறை",
308
+ exampleSentence: "உதாரண வாக்கியம்",
309
+ extendedVocabulary: "விரிவாக்கப்பட்ட சொற்கள்",
310
+ synonyms: "ஒத்த சொற்கள்",
311
+ antonyms: "எதிர் சொற்கள்",
312
+ root: "சொல்லின் வேர்",
313
+ grammarPoint: "இலக்கண புள்ளி",
314
+ explanation: "விளக்கம்",
315
+ uniqueAttributes: ""
316
+ },
317
+ "tur": {
318
+ pronunciation: "Latin Alfabesi",
319
+ partOfSpeech: "Sözcük Türü",
320
+ definition: "Tanım",
321
+ exampleSentence: "Örnek Cümle",
322
+ extendedVocabulary: "Genişletilmiş Kelime Dağarcığı",
323
+ synonyms: "Eş Anlamlılar",
324
+ antonyms: "Zıt Anlamlılar",
325
+ root: "Kök",
326
+ grammarPoint: "Dilbilgisi Noktası",
327
+ explanation: "Açıklama",
328
+ uniqueAttributes: ""
329
+ },
330
+ "urd": {
331
+ pronunciation: "رومنائزیشن",
332
+ partOfSpeech: "کلام کا حصہ",
333
+ definition: "تعریف",
334
+ exampleSentence: "مثال کا جملہ",
335
+ extendedVocabulary: "توسیع شدہ الفاظ",
336
+ synonyms: "مترادفات",
337
+ antonyms: "متضادات",
338
+ root: "جڑ",
339
+ grammarPoint: "گرائمر پوائنٹ",
340
+ explanation: "وضاحت",
341
+ uniqueAttributes: ""
342
+ },
343
+ "guj": {
344
+ pronunciation: "રોમનાઇઝેશન",
345
+ partOfSpeech: "શબ્દ પ્રકાર",
346
+ definition: "વ્યાખ્યા",
347
+ exampleSentence: "ઉદાહરણ વાક્ય",
348
+ extendedVocabulary: "વિસ્તૃત શબ્દભંડોળ",
349
+ synonyms: "સમાનાર્થી શબ્દો",
350
+ antonyms: "વિરોધી શબ્દો",
351
+ root: "મૂળ",
352
+ grammarPoint: "વ્યાકરણ બિંદુ",
353
+ explanation: "સમજૂતી",
354
+ uniqueAttributes: ""
355
+ },
356
+ "pol": {
357
+ pronunciation: "IPA",
358
+ partOfSpeech: "Część Mowy",
359
+ definition: "Definicja",
360
+ exampleSentence: "Przykładowe Zdanie",
361
+ extendedVocabulary: "Rozszerzony Słownik",
362
+ synonyms: "Synonimy",
363
+ antonyms: "Antonimy",
364
+ root: "Rdzeń",
365
+ grammarPoint: "Punkt Gramatyczny",
366
+ explanation: "Wyjaśnienie",
367
+ uniqueAttributes: ""
368
+ },
369
+ "ukr": {
370
+ pronunciation: "Романізація",
371
+ partOfSpeech: "Частина мови",
372
+ definition: "Визначення",
373
+ exampleSentence: "Приклад речення",
374
+ extendedVocabulary: "Розширений словник",
375
+ synonyms: "Синоніми",
376
+ antonyms: "Антоніми",
377
+ root: "Корінь",
378
+ grammarPoint: "Граматична точка",
379
+ explanation: "Пояснення",
380
+ uniqueAttributes: ""
381
+ },
382
+ "kan": {
383
+ pronunciation: "ರೋಮನೀಕರಣ",
384
+ partOfSpeech: "ಪದದ ವರ್ಗ",
385
+ definition: "ವ್ಯಾಖ್ಯಾನ",
386
+ exampleSentence: "ಉದಾಹರಣೆ ವಾಕ್ಯ",
387
+ extendedVocabulary: "ವಿಸ್ತೃತ ಶಬ್ದಕೋಶ",
388
+ synonyms: "ಸಮಾನಾರ್ಥಕ ಪದಗಳು",
389
+ antonyms: "ವಿರುದ್ಧಾರ್ಥಕ ಪದಗಳು",
390
+ root: "ಮೂಲ",
391
+ grammarPoint: "ವ್ಯಾಕರಣ ಅಂಶ",
392
+ explanation: "ವಿವರಣೆ",
393
+ uniqueAttributes: ""
394
+ },
395
+ "mai": {
396
+ pronunciation: "रोमनकरण",
397
+ partOfSpeech: "शब्द भेद",
398
+ definition: "परिभाषा",
399
+ exampleSentence: "उदाहरण वाक्य",
400
+ extendedVocabulary: "विस्तारित शब्दावली",
401
+ synonyms: "समानार्थी",
402
+ antonyms: "विलोम",
403
+ root: "मूल",
404
+ grammarPoint: "व्याकरण बिंदु",
405
+ explanation: "व्याख्या",
406
+ uniqueAttributes: ""
407
+ },
408
+ "mal": {
409
+ pronunciation: "ലാറ്റിനീകരണം",
410
+ partOfSpeech: "വാക്ക് തരം",
411
+ definition: "നിർവചനം",
412
+ exampleSentence: "ഉദാഹരണ വാക്യം",
413
+ extendedVocabulary: "വിപുലീകൃത പദാവലി",
414
+ synonyms: "പര്യായപദങ്ങൾ",
415
+ antonyms: "വിപരീതപദങ്ങൾ",
416
+ root: "മൂലം",
417
+ grammarPoint: "വ്യാകരണ പോയിന്റ്",
418
+ explanation: "വിശദീകരണം",
419
+ uniqueAttributes: ""
420
+ },
421
+ "pes": {
422
+ pronunciation: "رومی‌سازی",
423
+ partOfSpeech: "نوع کلمه",
424
+ definition: "تعریف",
425
+ exampleSentence: "جمله مثال",
426
+ extendedVocabulary: "واژگان گسترده",
427
+ synonyms: "مترادف‌ها",
428
+ antonyms: "متضادها",
429
+ root: "ریشه",
430
+ grammarPoint: "نکته دستوری",
431
+ explanation: "توضیح",
432
+ uniqueAttributes: ""
433
+ },
434
+ "mya": {
435
+ pronunciation: "ရိုမနైဇေးရှင်း",
436
+ partOfSpeech: "စကားစု အမျိုးအစား",
437
+ definition: "အဓိပ္ပာယ်",
438
+ exampleSentence: "ဥပမာ စာကြောင်း",
439
+ extendedVocabulary: "တိုးချဲ့ စကားလုံး",
440
+ synonyms: "ဆင်တူ စကားလုံး",
441
+ antonyms: "ဆန့်ကျင် စကားလုံး",
442
+ root: "မူလ",
443
+ grammarPoint: "သဒ္ဒါအချက်",
444
+ explanation: "ရှင်းလင်းချက်",
445
+ uniqueAttributes: ""
446
+ },
447
+ "swh": {
448
+ pronunciation: "IPA",
449
+ partOfSpeech: "Aina ya Neno",
450
+ definition: "Maana",
451
+ exampleSentence: "Mfano wa Sentensi",
452
+ extendedVocabulary: "Msamiati Uliopanuliwa",
453
+ synonyms: "Visawe",
454
+ antonyms: "Kinyume",
455
+ root: "Mzizi",
456
+ grammarPoint: "Pointi ya Sarufi",
457
+ explanation: "Ufafanuzi",
458
+ uniqueAttributes: ""
459
+ },
460
+ "sun": {
461
+ pronunciation: "Romanisasi",
462
+ partOfSpeech: "Jinis Kecap",
463
+ definition: "Harti",
464
+ exampleSentence: "Conto Kalimah",
465
+ extendedVocabulary: "Kosakata Ditambah",
466
+ synonyms: "Sinonim",
467
+ antonyms: "Antonim",
468
+ root: "Akar Kecap",
469
+ grammarPoint: "Titik Tata Basa",
470
+ explanation: "Katerangan",
471
+ uniqueAttributes: ""
472
+ },
473
+ "ron": {
474
+ pronunciation: "IPA",
475
+ partOfSpeech: "Parte de Vorbire",
476
+ definition: "Definiție",
477
+ exampleSentence: "Propoziție Exemplu",
478
+ extendedVocabulary: "Vocabular Extins",
479
+ synonyms: "Sinonime",
480
+ antonyms: "Antonime",
481
+ root: "Rădăcină",
482
+ grammarPoint: "Punct Gramatical",
483
+ explanation: "Explicație",
484
+ uniqueAttributes: ""
485
+ },
486
+ "pan": {
487
+ pronunciation: "ਰੋਮਨਾਈਜ਼ੇਸ਼ਨ",
488
+ partOfSpeech: "ਸ਼ਬਦ ਦੀ ਕਿਸਮ",
489
+ definition: "ਪਰਿਭਾਸ਼ਾ",
490
+ exampleSentence: "ਉਦਾਹਰਨ ਵਾਕ",
491
+ extendedVocabulary: "ਵਿਸਤ੍ਰਿਤ ਸ਼ਬਦਾਵਲੀ",
492
+ synonyms: "ਸਮਾਨਾਰਥੀ ਸ਼ਬਦ",
493
+ antonyms: "ਵਿਰੋਧੀ ਸ਼ਬਦ",
494
+ root: "ਮੂਲ",
495
+ grammarPoint: "ਵਿਆਕਰਣ ਬਿੰਦੂ",
496
+ explanation: "ਸਪੱਸ਼ਟੀਕਰਨ",
497
+ uniqueAttributes: ""
498
+ },
499
+ "bho": {
500
+ pronunciation: "रोमनकरण",
501
+ partOfSpeech: "शब्द भेद",
502
+ definition: "परिभाषा",
503
+ exampleSentence: "उदाहरण वाक्य",
504
+ extendedVocabulary: "विस्तारित शब्दावली",
505
+ synonyms: "समानार्थी",
506
+ antonyms: "विलोम",
507
+ root: "मूल",
508
+ grammarPoint: "व्याकरण बिंदु",
509
+ explanation: "व्याख्या",
510
+ uniqueAttributes: ""
511
+ },
512
+ "amh": {
513
+ pronunciation: "ሮማናይዜሽን",
514
+ partOfSpeech: "የቃል አይነት",
515
+ definition: "ትርጉም",
516
+ exampleSentence: "የምሳሌ ዓረፍተ ነገር",
517
+ extendedVocabulary: "የተዘረጋ ቃላት",
518
+ synonyms: "ተመሳሳይ ቃላት",
519
+ antonyms: "ተቃራኒ ቃላት",
520
+ root: "ሥር",
521
+ grammarPoint: "ሰዋሰው ነጥብ",
522
+ explanation: "ማብራሪያ",
523
+ uniqueAttributes: ""
524
+ },
525
+ "hau": {
526
+ pronunciation: "IPA",
527
+ partOfSpeech: "Nau'in Kalma",
528
+ definition: "Ma'ana",
529
+ exampleSentence: "Misali Jimla",
530
+ extendedVocabulary: "Ƙarin Kalmomi",
531
+ synonyms: "Kalmomi Masu Kamanceceniya",
532
+ antonyms: "Sabanin Kalmomi",
533
+ root: "Tushen Kalma",
534
+ grammarPoint: "Manufa na Nahawu",
535
+ explanation: "Bayani",
536
+ uniqueAttributes: ""
537
+ },
538
+ "fuv": {
539
+ pronunciation: "IPA",
540
+ partOfSpeech: "Nokkuure Ɗemɗe",
541
+ definition: "Faamsɗo",
542
+ exampleSentence: "Winndere Seedantaare",
543
+ extendedVocabulary: "Ɗemɗe Ɓurɗe",
544
+ synonyms: "Ɗemɗe Noon",
545
+ antonyms: "Ɗemɗe Feeñal",
546
+ root: "Lewru",
547
+ grammarPoint: "Ganndal Ganndal",
548
+ explanation: "Tafsiir",
549
+ uniqueAttributes: ""
550
+ },
551
+ "bos": {
552
+ pronunciation: "Latinica",
553
+ partOfSpeech: "Vrsta riječi",
554
+ definition: "Definicija",
555
+ exampleSentence: "Primjer rečenice",
556
+ extendedVocabulary: "Prošireni rečnik",
557
+ synonyms: "Sinonimi",
558
+ antonyms: "Antonimi",
559
+ root: "Korijen",
560
+ grammarPoint: "Gramatički punkt",
561
+ explanation: "Objašnjenje",
562
+ uniqueAttributes: ""
563
+ },
564
+ "hrv": {
565
+ pronunciation: "IPA",
566
+ partOfSpeech: "Vrsta Riječi",
567
+ definition: "Definicija",
568
+ exampleSentence: "Primjer Rečenice",
569
+ extendedVocabulary: "Prošireni Rječnik",
570
+ synonyms: "Sinonimi",
571
+ antonyms: "Antonimi",
572
+ root: "Korijen",
573
+ grammarPoint: "Gramatička Točka",
574
+ explanation: "Objašnjenje",
575
+ uniqueAttributes: ""
576
+ },
577
+ "nld": {
578
+ pronunciation: "IPA",
579
+ partOfSpeech: "Woordsoort",
580
+ definition: "Definitie",
581
+ exampleSentence: "Voorbeeldzin",
582
+ extendedVocabulary: "Uitgebreide Woordenschat",
583
+ synonyms: "Synoniemen",
584
+ antonyms: "Antoniemen",
585
+ root: "Wortel",
586
+ grammarPoint: "Grammaticaal Punt",
587
+ explanation: "Uitleg",
588
+ uniqueAttributes: ""
589
+ },
590
+ "srp": {
591
+ pronunciation: "Latinica",
592
+ partOfSpeech: "Врста речи",
593
+ definition: "Дефиниција",
594
+ exampleSentence: "Пример реченице",
595
+ extendedVocabulary: "Проширени речник",
596
+ synonyms: "Синоними",
597
+ antonyms: "Антоними",
598
+ root: "Корен",
599
+ grammarPoint: "Граматичка тачка",
600
+ explanation: "Објашњење",
601
+ uniqueAttributes: ""
602
+ },
603
+ "tha": {
604
+ pronunciation: "การถอดเสียง",
605
+ partOfSpeech: "ชนิดของคำ",
606
+ definition: "คำนิยาม",
607
+ exampleSentence: "ประโยคตัวอย่าง",
608
+ extendedVocabulary: "คำศัพท์เพิ่มเติม",
609
+ synonyms: "คำพ้องความหมาย",
610
+ antonyms: "คำตรงข้าม",
611
+ root: "รากศัพท์",
612
+ grammarPoint: "จุดไวยากรณ์",
613
+ explanation: "คำอธิบาย",
614
+ uniqueAttributes: ""
615
+ },
616
+ "ckb": {
617
+ pronunciation: "لاتینیکردن",
618
+ partOfSpeech: "جۆری وشە",
619
+ definition: "پێناسە",
620
+ exampleSentence: "ڕستەی نموونە",
621
+ extendedVocabulary: "وشەی زیادکراو",
622
+ synonyms: "هاوواتا",
623
+ antonyms: "پێچەوانە",
624
+ root: "ڕەگ",
625
+ grammarPoint: "خاڵی ڕێزمان",
626
+ explanation: "ڕوونکردنەوە",
627
+ uniqueAttributes: ""
628
+ },
629
+ "yor": {
630
+ pronunciation: "IPA",
631
+ partOfSpeech: "Ẹ̀ka Ọ̀rọ̀",
632
+ definition: "Ìtumọ̀",
633
+ exampleSentence: "Àpẹẹrẹ Gbólóhùn",
634
+ extendedVocabulary: "Ọ̀rọ̀ Àfikún",
635
+ synonyms: "Ọ̀rọ̀ Ìbámu",
636
+ antonyms: "Ọ̀rọ̀ Ìdàkejì",
637
+ root: "Gbòǹgbò Ọ̀rọ̀",
638
+ grammarPoint: "Àmì Gírámà",
639
+ explanation: "Àlàyé",
640
+ uniqueAttributes: ""
641
+ },
642
+ "uzn": {
643
+ pronunciation: "Lotin",
644
+ partOfSpeech: "Сўз туркуми",
645
+ definition: "Таъриф",
646
+ exampleSentence: "Мисол жумла",
647
+ extendedVocabulary: "Кенгайтирилган луғат",
648
+ synonyms: "Синонимлар",
649
+ antonyms: "Антонимлар",
650
+ root: "Илдиз",
651
+ grammarPoint: "Грамматика нуқтаси",
652
+ explanation: "Изоҳ",
653
+ uniqueAttributes: ""
654
+ },
655
+ "zlm": {
656
+ pronunciation: "رومنيسسي",
657
+ partOfSpeech: "جنيس ڤرکاتاءن",
658
+ definition: "تعريف",
659
+ exampleSentence: "ايبارت چونتوه",
660
+ extendedVocabulary: "ڤربنداهاراءن کات دڤرلواسکن",
661
+ synonyms: "سينونيم",
662
+ antonyms: "انتونيم",
663
+ root: "اکر",
664
+ grammarPoint: "نوكته تات بهاس",
665
+ explanation: "كترڠن",
666
+ uniqueAttributes: ""
667
+ },
668
+ "ibo": {
669
+ pronunciation: "Romanization",
670
+ partOfSpeech: "Ụdị Okwu",
671
+ definition: "Nkọwa",
672
+ exampleSentence: "Ahịrịokwu Ihe Atụ",
673
+ extendedVocabulary: "Okwu Ndị Ọzọ",
674
+ synonyms: "Okwu Yiri Ya",
675
+ antonyms: "Okwu Megidere Ya",
676
+ root: "Mgbọrọgwụ Okwu",
677
+ grammarPoint: "Isi Ụtụ Asụsụ",
678
+ explanation: "Nkọwa",
679
+ uniqueAttributes: ""
680
+ },
681
+ "npi": {
682
+ pronunciation: "रोमनकरण",
683
+ partOfSpeech: "शब्द भेद",
684
+ definition: "परिभाषा",
685
+ exampleSentence: "उदाहरण वाक्य",
686
+ extendedVocabulary: "विस्तारित शब्दावली",
687
+ synonyms: "समानार्थी शब्द",
688
+ antonyms: "विलोम शब्द",
689
+ root: "मूल",
690
+ grammarPoint: "व्याकरण बिन्दु",
691
+ explanation: "व्याख्या",
692
+ uniqueAttributes: ""
693
+ },
694
+ "ceb": {
695
+ pronunciation: "IPA",
696
+ partOfSpeech: "Bahin sa Sinultihan",
697
+ definition: "Kahulugan",
698
+ exampleSentence: "Pananglitan nga Sentence",
699
+ extendedVocabulary: "Dugang nga Bokabularyo",
700
+ synonyms: "Managsama nga Kahulogan",
701
+ antonyms: "Kaatbang nga Kahulogan",
702
+ root: "Gamot",
703
+ grammarPoint: "Punto sa Gramatika",
704
+ explanation: "Pagpatin-aw",
705
+ uniqueAttributes: ""
706
+ },
707
+ "skr": {
708
+ pronunciation: "رومنائیزیشن",
709
+ partOfSpeech: "کلام جا حصہ",
710
+ definition: "تعریف",
711
+ exampleSentence: "مثال جملہ",
712
+ extendedVocabulary: "ودھائے الفاظ",
713
+ synonyms: "ہم معنی",
714
+ antonyms: "متضاد",
715
+ root: "جڑ",
716
+ grammarPoint: "گرامر پوائنٹ",
717
+ explanation: "وضاحت",
718
+ uniqueAttributes: ""
719
+ },
720
+ "tgl": {
721
+ pronunciation: "IPA",
722
+ partOfSpeech: "Bahagi ng Pananalita",
723
+ definition: "Kahulugan",
724
+ exampleSentence: "Halimbawang Pangungusap",
725
+ extendedVocabulary: "Pinalawak na Bokabularyo",
726
+ synonyms: "Kasingkahulugan",
727
+ antonyms: "Kasalungat",
728
+ root: "Ugat",
729
+ grammarPoint: "Punto ng Gramatika",
730
+ explanation: "Paliwanag",
731
+ uniqueAttributes: ""
732
+ },
733
+ "hun": {
734
+ pronunciation: "IPA",
735
+ partOfSpeech: "Szófaj",
736
+ definition: "Meghatározás",
737
+ exampleSentence: "Példamondat",
738
+ extendedVocabulary: "Bővített Szókincs",
739
+ synonyms: "Szinonimák",
740
+ antonyms: "Ellentétek",
741
+ root: "Szótő",
742
+ grammarPoint: "Nyelvtani Pont",
743
+ explanation: "Magyarázat",
744
+ uniqueAttributes: ""
745
+ },
746
+ "azj": {
747
+ pronunciation: "Latinləşdirmə",
748
+ partOfSpeech: "Сөз нөвү",
749
+ definition: "Тәриф",
750
+ exampleSentence: "Нүмунә ҹүмлә",
751
+ extendedVocabulary: "Генишләндирилмиш луғәт",
752
+ synonyms: "Синонимләр",
753
+ antonyms: "Антонимләр",
754
+ root: "Көк",
755
+ grammarPoint: "Qrammatik nöqtə",
756
+ explanation: "İzah",
757
+ uniqueAttributes: ""
758
+ },
759
+ "sin": {
760
+ pronunciation: "රෝමානුකරණය",
761
+ partOfSpeech: "වචන වර්ගය",
762
+ definition: "අර්ථ දැක්වීම",
763
+ exampleSentence: "උදාහරණ වාක්‍යය",
764
+ extendedVocabulary: "පුළුල් කළ වචන මාලාව",
765
+ synonyms: "සමාන වචන",
766
+ antonyms: "ප්‍රතිවචන",
767
+ root: "මූලය",
768
+ grammarPoint: "ව්‍යාකරණ ලක්ෂ්‍යය",
769
+ explanation: "පැහැදිලි කිරීම",
770
+ uniqueAttributes: ""
771
+ },
772
+ "koi": {
773
+ pronunciation: "Латинизация",
774
+ partOfSpeech: "Кывлӧн тип",
775
+ definition: "Индӧд",
776
+ exampleSentence: "Индан сёрникузя",
777
+ extendedVocabulary: "Паськыттэм кывчукӧр",
778
+ synonyms: "Ӧткодьлун кывъяс",
779
+ antonyms: "Торъя кывъяс",
780
+ root: "Корень",
781
+ grammarPoint: "Грамматика точка",
782
+ explanation: "Объяснение",
783
+ uniqueAttributes: ""
784
+ },
785
+ "ell": {
786
+ pronunciation: "Λατινοποίηση",
787
+ partOfSpeech: "Μέρος του Λόγου",
788
+ definition: "Ορισμός",
789
+ exampleSentence: "Παράδειγμα Πρότασης",
790
+ extendedVocabulary: "Εκτεταμένο Λεξιλόγιο",
791
+ synonyms: "Συνώνυμα",
792
+ antonyms: "Αντώνυμα",
793
+ root: "Ρίζα",
794
+ grammarPoint: "Γραμματικό Σημείο",
795
+ explanation: "Επεξήγηση",
796
+ uniqueAttributes: ""
797
+ },
798
+ "ces": {
799
+ pronunciation: "IPA",
800
+ partOfSpeech: "Slovní Druh",
801
+ definition: "Definice",
802
+ exampleSentence: "Příklad Věty",
803
+ extendedVocabulary: "Rozšířená Slovní Zásoba",
804
+ synonyms: "Synonyma",
805
+ antonyms: "Antonyma",
806
+ root: "Kořen",
807
+ grammarPoint: "Gramatický Bod",
808
+ explanation: "Vysvětlení",
809
+ uniqueAttributes: ""
810
+ },
811
+ "mag": {
812
+ pronunciation: "रोमनकरण",
813
+ partOfSpeech: "शब्द भेद",
814
+ definition: "परिभाषा",
815
+ exampleSentence: "उदाहरण वाक्य",
816
+ extendedVocabulary: "विस्तारित शब्दावली",
817
+ synonyms: "समानार्थी",
818
+ antonyms: "विलोम",
819
+ root: "मूल",
820
+ grammarPoint: "व्याकरण बिंदु",
821
+ explanation: "व्याख्या",
822
+ uniqueAttributes: ""
823
+ },
824
+ "run": {
825
+ pronunciation: "IPA",
826
+ partOfSpeech: "Ubwoko bw'Ijambo",
827
+ definition: "Isobanuro",
828
+ exampleSentence: "Interuro y'Urugero",
829
+ extendedVocabulary: "Amagambo Yagutse",
830
+ synonyms: "Amagambo Ahuye",
831
+ antonyms: "Amagambo Atandukanye",
832
+ root: "Imizi",
833
+ grammarPoint: "Ingingo y'Ikibonezamvugo",
834
+ explanation: "Ibisobanuro",
835
+ uniqueAttributes: ""
836
+ },
837
+ "bel": {
838
+ pronunciation: "Лацінізацыя",
839
+ partOfSpeech: "Часціна мовы",
840
+ definition: "Азначэнне",
841
+ exampleSentence: "Прыклад сказа",
842
+ extendedVocabulary: "Пашыраны слоўнік",
843
+ synonyms: "Сінонімы",
844
+ antonyms: "Антонімы",
845
+ root: "Корань",
846
+ grammarPoint: "Граматычны пункт",
847
+ explanation: "Тлумачэнне",
848
+ uniqueAttributes: ""
849
+ },
850
+ "plt": {
851
+ pronunciation: "IPA",
852
+ partOfSpeech: "Karazana Teny",
853
+ definition: "Famaritana",
854
+ exampleSentence: "Fehezanteny Ohatra",
855
+ extendedVocabulary: "Teny Mivelatra",
856
+ synonyms: "Mitovy Hevitra",
857
+ antonyms: "Mifanohitra",
858
+ root: "Fototry",
859
+ grammarPoint: "Teny Fitsipi-pitenenana",
860
+ explanation: "Fanazavana",
861
+ uniqueAttributes: ""
862
+ },
863
+ "qug": {
864
+ pronunciation: "IPA",
865
+ partOfSpeech: "Shimipa Laya",
866
+ definition: "Willay",
867
+ exampleSentence: "Rikuchina Rimay",
868
+ extendedVocabulary: "Mirarishka Shimikuna",
869
+ synonyms: "Kipa Shina Shimikuna",
870
+ antonyms: "Chikan Shimikuna",
871
+ root: "Sapi",
872
+ grammarPoint: "Shimipa Puntos",
873
+ explanation: "Willay",
874
+ uniqueAttributes: ""
875
+ },
876
+ "mad": {
877
+ pronunciation: "Romanisasi",
878
+ partOfSpeech: "Jenis Bhâsa",
879
+ definition: "Pangartèyan",
880
+ exampleSentence: "Contowan Kalèmat",
881
+ extendedVocabulary: "Kosa Kata Tambahan",
882
+ synonyms: "Sinonim",
883
+ antonyms: "Antonim",
884
+ root: "Akar",
885
+ grammarPoint: "Poin Tata Bahasa",
886
+ explanation: "Katerangan",
887
+ uniqueAttributes: ""
888
+ },
889
+ "nya": {
890
+ pronunciation: "IPA",
891
+ partOfSpeech: "Mtundu wa Mawu",
892
+ definition: "Tanthauzo",
893
+ exampleSentence: "Chitsanzo cha Chiganizo",
894
+ extendedVocabulary: "Mawu Owonjezera",
895
+ synonyms: "Mawu Ofanana",
896
+ antonyms: "Mawu Osiyana",
897
+ root: "Muzu",
898
+ grammarPoint: "Mfundo ya Galamala",
899
+ explanation: "Kufotokoza",
900
+ uniqueAttributes: ""
901
+ },
902
+ "zyb": {
903
+ pronunciation: "拉丁壮文",
904
+ partOfSpeech: "词类",
905
+ definition: "定义",
906
+ exampleSentence: "例句",
907
+ extendedVocabulary: "扩展词汇",
908
+ synonyms: "同义词",
909
+ antonyms: "反义词",
910
+ root: "词根",
911
+ grammarPoint: "语法点",
912
+ explanation: "解释",
913
+ uniqueAttributes: ""
914
+ },
915
+ "pbu": {
916
+ pronunciation: "رومنائزیشن",
917
+ partOfSpeech: "د کلمې ډول",
918
+ definition: "تعریف",
919
+ exampleSentence: "د مثال جمله",
920
+ extendedVocabulary: "پراخه شوي کلمې",
921
+ synonyms: "مترادفات",
922
+ antonyms: "متضادات",
923
+ root: "ریښه",
924
+ grammarPoint: "ګرامر نقطه",
925
+ explanation: "تشریح",
926
+ uniqueAttributes: ""
927
+ },
928
+ "kin": {
929
+ pronunciation: "Romanization",
930
+ partOfSpeech: "Ubwoko bw'Ijambo",
931
+ definition: "Isobanuro",
932
+ exampleSentence: "Interuro y'Urugero",
933
+ extendedVocabulary: "Amagambo Yagutse",
934
+ synonyms: "Amagambo Ahuye",
935
+ antonyms: "Amagambo Atandukanye",
936
+ root: "Imizi",
937
+ grammarPoint: "Ingingo y'Ikibonezamvugo",
938
+ explanation: "Ibisobanuro",
939
+ uniqueAttributes: ""
940
+ },
941
+ "zul": {
942
+ pronunciation: "IPA",
943
+ partOfSpeech: "Uhlobo Lwegama",
944
+ definition: "Incazelo",
945
+ exampleSentence: "Isibonelo Somusho",
946
+ extendedVocabulary: "Amagama Anwetshiwe",
947
+ synonyms: "Amagama Afanayo",
948
+ antonyms: "Amagama Aphikisayo",
949
+ root: "Impande",
950
+ grammarPoint: "Iphuzu Lolimi",
951
+ explanation: "Incazelo",
952
+ uniqueAttributes: ""
953
+ },
954
+ "bul": {
955
+ pronunciation: "Латинизация",
956
+ partOfSpeech: "Част на речта",
957
+ definition: "Дефиниция",
958
+ exampleSentence: "Примерно изречение",
959
+ extendedVocabulary: "Разширен речник",
960
+ synonyms: "Синоними",
961
+ antonyms: "Антоними",
962
+ root: "Корен",
963
+ grammarPoint: "Граматична точка",
964
+ explanation: "Обяснение",
965
+ uniqueAttributes: ""
966
+ },
967
+ "swe": {
968
+ pronunciation: "IPA",
969
+ partOfSpeech: "Ordklass",
970
+ definition: "Definition",
971
+ exampleSentence: "Exempel Mening",
972
+ extendedVocabulary: "Utökad Vokabulär",
973
+ synonyms: "Synonymer",
974
+ antonyms: "Antonymer",
975
+ root: "Rot",
976
+ grammarPoint: "Grammatikpunkt",
977
+ explanation: "Förklaring",
978
+ uniqueAttributes: ""
979
+ },
980
+ "lin": {
981
+ pronunciation: "IPA",
982
+ partOfSpeech: "Lolenge ya Liloba",
983
+ definition: "Ndimbola",
984
+ exampleSentence: "Ndakisa ya Fraze",
985
+ extendedVocabulary: "Maloba Mingi",
986
+ synonyms: "Maloba ya Ndenge Moko",
987
+ antonyms: "Maloba Mikokanisi",
988
+ root: "Motó",
989
+ grammarPoint: "Likambo ya Grammaire",
990
+ explanation: "Ndimbola",
991
+ uniqueAttributes: ""
992
+ },
993
+ "som": {
994
+ pronunciation: "IPA",
995
+ partOfSpeech: "Nooca Ereyga",
996
+ definition: "Macnaha",
997
+ exampleSentence: "Tusaale Weedh",
998
+ extendedVocabulary: "Erayada Ballaarsan",
999
+ synonyms: "Erayada Isku Macnaha",
1000
+ antonyms: "Erayada Liddi",
1001
+ root: "Xididka",
1002
+ grammarPoint: "Xarunta Naxwaha",
1003
+ explanation: "Sharaxaad",
1004
+ uniqueAttributes: ""
1005
+ },
1006
+ "hms": {
1007
+ pronunciation: "拉丁苗文",
1008
+ partOfSpeech: "词类",
1009
+ definition: "定义",
1010
+ exampleSentence: "例句",
1011
+ extendedVocabulary: "扩展词汇",
1012
+ synonyms: "同义词",
1013
+ antonyms: "反义词",
1014
+ root: "词根",
1015
+ grammarPoint: "语法点",
1016
+ explanation: "解释",
1017
+ uniqueAttributes: ""
1018
+ },
1019
+ "hnj": {
1020
+ pronunciation: "Romanized Popular Alphabet",
1021
+ partOfSpeech: "Hom Lus",
1022
+ definition: "Txhais",
1023
+ exampleSentence: "Kab Lus Piv Txwv",
1024
+ extendedVocabulary: "Lo Lus Ntxiv",
1025
+ synonyms: "Lo Lus Zoo Sib Xws",
1026
+ antonyms: "Lo Lus Sib Txawv",
1027
+ root: "Hauv Paus",
1028
+ grammarPoint: "Qhov Grammar",
1029
+ explanation: "Piav Qhia",
1030
+ uniqueAttributes: ""
1031
+ },
1032
+ "ilo": {
1033
+ pronunciation: "IPA",
1034
+ partOfSpeech: "Kita ti Sasao",
1035
+ definition: "Kaipapanan",
1036
+ exampleSentence: "Pagarigan a Sentensia",
1037
+ extendedVocabulary: "Naparsuaan a Bokabularyo",
1038
+ synonyms: "Agpapada ti Kaipapanan",
1039
+ antonyms: "Agsumbangir ti Kaipapanan",
1040
+ root: "Ramut",
1041
+ grammarPoint: "Puntos ti Gramatika",
1042
+ explanation: "Panangilawlawag",
1043
+ uniqueAttributes: ""
1044
+ },
1045
+ "kaz": {
1046
+ pronunciation: "Латын жазуы",
1047
+ partOfSpeech: "Сөз табы",
1048
+ definition: "Анықтама",
1049
+ exampleSentence: "Мысал сөйлем",
1050
+ extendedVocabulary: "Кеңейтілген сөздік",
1051
+ synonyms: "Синонимдер",
1052
+ antonyms: "Антонимдер",
1053
+ root: "Түбір",
1054
+ grammarPoint: "Грамматикалық нүкте",
1055
+ explanation: "Түсіндіру",
1056
+ uniqueAttributes: ""
1057
+ }
1058
+ };
1059
+
1060
+ //#endregion
1061
+ //#region src/constants/url.ts
1062
+ const CHROME_EXTENSION_ORIGIN = "chrome-extension://modkelfkcfjpgbfmnbnllalkiogfofhb";
1063
+ const EDGE_EXTENSION_ORIGIN = "extension://cbcbomlgikfbdnoaohcjfledcoklcjbo";
1064
+ const TRUSTED_ORIGINS = [CHROME_EXTENSION_ORIGIN, EDGE_EXTENSION_ORIGIN];
1065
+ const WEBSITE_DEV_PORT = 8888;
1066
+ const WEBSITE_DEV_URL = `http://localhost:${WEBSITE_DEV_PORT}`;
1067
+ const WEBSITE_PROD_URL = "https://www.readfrog.app";
1068
+ const READFROG_DOMAIN = "readfrog.app";
1069
+ const LOCALHOST_DOMAIN = "localhost";
1070
+ const AUTH_DOMAINS = [READFROG_DOMAIN, LOCALHOST_DOMAIN];
1071
+
1072
+ //#endregion
1073
+ //#region src/schemas/version.ts
1074
+ /**
1075
+ * Semantic version regex pattern
1076
+ * Matches versions like: 1.0.0, 10.20.30
1077
+ * Does NOT match: v1.0.0, 1.0.0-alpha, 1.0, 1.-1.0
1078
+ */
1079
+ const SEMANTIC_VERSION_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
1080
+ /**
1081
+ * Zod schema for semantic version validation
1082
+ * Validates semantic version strings according to SemVer conventions
1083
+ * Requires exactly 3 parts: major.minor.patch
1084
+ *
1085
+ * @example
1086
+ * semanticVersionSchema.parse('1.0.0') // ✓ valid
1087
+ * semanticVersionSchema.parse('10.20.30') // ✓ valid
1088
+ * semanticVersionSchema.parse('1.11') // ✗ throws error (must have 3 parts)
1089
+ * semanticVersionSchema.parse('v1.0.0') // ✗ throws error
1090
+ * semanticVersionSchema.parse('1.0.0-alpha') // ✗ throws error
1091
+ */
1092
+ const semanticVersionSchema = z.string().regex(SEMANTIC_VERSION_REGEX, "Must be a valid semantic version with exactly 3 parts (e.g., 1.0.0, 10.20.30)").refine((version) => {
1093
+ const parts = version.split(".");
1094
+ return parts.length === 3 && parts.every((part) => !Number.isNaN(Number(part)) && Number(part) >= 0);
1095
+ }, { message: "Version must have exactly 3 parts and all parts must be non-negative numbers" });
1096
+ /**
1097
+ * Parse a semantic version string into its components
1098
+ * Validates the input using semanticVersionSchema before parsing
1099
+ *
1100
+ * @param version - The version string to parse (must be in format major.minor.patch)
1101
+ * @returns An object containing the major, minor, and patch numbers
1102
+ * @throws {z.ZodError} If the version string is invalid
1103
+ *
1104
+ * @example
1105
+ * parseSemanticVersion('1.2.3') // { major: 1, minor: 2, patch: 3 }
1106
+ * parseSemanticVersion('10.20.30') // { major: 10, minor: 20, patch: 30 }
1107
+ * parseSemanticVersion('1.0') // throws error - must have 3 parts
1108
+ * parseSemanticVersion('v1.0.0') // throws error - invalid format
1109
+ */
1110
+ function parseSemanticVersion(version) {
1111
+ const parts = semanticVersionSchema.parse(version).split(".");
1112
+ return {
1113
+ major: Number.parseInt(parts[0], 10),
1114
+ minor: Number.parseInt(parts[1], 10),
1115
+ patch: Number.parseInt(parts[2], 10)
1116
+ };
1117
+ }
1118
+ /**
1119
+ * Determine the version type (major, minor, or patch) based on semantic versioning rules
1120
+ * Validates the input using semanticVersionSchema before classification
1121
+ *
1122
+ * @param version - The version string to classify
1123
+ * @returns The version type classification
1124
+ * @throws {z.ZodError} If the version string is invalid
1125
+ *
1126
+ * @example
1127
+ * getVersionType('1.0.0') // 'major'
1128
+ * getVersionType('1.2.0') // 'minor'
1129
+ * getVersionType('1.2.3') // 'patch'
1130
+ * getVersionType('1.0') // throws error - must have 3 parts
1131
+ */
1132
+ function getVersionType(version) {
1133
+ const { major, minor, patch } = parseSemanticVersion(version);
1134
+ if (major > 0 && minor === 0 && patch === 0) return "major";
1135
+ else if (minor > 0 && patch === 0) return "minor";
1136
+ else return "patch";
1137
+ }
1138
+
1139
+ //#endregion
1140
+ //#region src/types/languages.ts
1141
+ const LANG_CODE_ISO6393_OPTIONS = [
1142
+ "eng",
1143
+ "cmn",
1144
+ "cmn-Hant",
1145
+ "yue",
1146
+ "spa",
1147
+ "rus",
1148
+ "arb",
1149
+ "ben",
1150
+ "hin",
1151
+ "por",
1152
+ "ind",
1153
+ "jpn",
1154
+ "fra",
1155
+ "deu",
1156
+ "jav",
1157
+ "kor",
1158
+ "tel",
1159
+ "vie",
1160
+ "mar",
1161
+ "ita",
1162
+ "tam",
1163
+ "tur",
1164
+ "urd",
1165
+ "guj",
1166
+ "pol",
1167
+ "ukr",
1168
+ "kan",
1169
+ "mai",
1170
+ "mal",
1171
+ "pes",
1172
+ "mya",
1173
+ "swh",
1174
+ "sun",
1175
+ "ron",
1176
+ "pan",
1177
+ "bho",
1178
+ "amh",
1179
+ "hau",
1180
+ "fuv",
1181
+ "bos",
1182
+ "hrv",
1183
+ "nld",
1184
+ "srp",
1185
+ "tha",
1186
+ "ckb",
1187
+ "yor",
1188
+ "uzn",
1189
+ "zlm",
1190
+ "ibo",
1191
+ "npi",
1192
+ "ceb",
1193
+ "skr",
1194
+ "tgl",
1195
+ "hun",
1196
+ "azj",
1197
+ "sin",
1198
+ "koi",
1199
+ "ell",
1200
+ "ces",
1201
+ "mag",
1202
+ "run",
1203
+ "bel",
1204
+ "plt",
1205
+ "qug",
1206
+ "mad",
1207
+ "nya",
1208
+ "zyb",
1209
+ "pbu",
1210
+ "kin",
1211
+ "zul",
1212
+ "bul",
1213
+ "swe",
1214
+ "lin",
1215
+ "som",
1216
+ "hms",
1217
+ "hnj",
1218
+ "ilo",
1219
+ "kaz"
1220
+ ];
1221
+ const langCodeISO6393Schema = z.enum(LANG_CODE_ISO6393_OPTIONS);
1222
+ const langCodeISO6391Schema = z.enum([
1223
+ "en",
1224
+ "zh",
1225
+ "zh-TW",
1226
+ "es",
1227
+ "ru",
1228
+ "ar",
1229
+ "bn",
1230
+ "hi",
1231
+ "pt",
1232
+ "id",
1233
+ "ja",
1234
+ "fr",
1235
+ "de",
1236
+ "jv",
1237
+ "ko",
1238
+ "te",
1239
+ "vi",
1240
+ "mr",
1241
+ "it",
1242
+ "ta",
1243
+ "tr",
1244
+ "ur",
1245
+ "gu",
1246
+ "pl",
1247
+ "uk",
1248
+ "kn",
1249
+ "ml",
1250
+ "fa",
1251
+ "my",
1252
+ "sw",
1253
+ "su",
1254
+ "ro",
1255
+ "pa",
1256
+ "am",
1257
+ "ha",
1258
+ "ff",
1259
+ "bs",
1260
+ "hr",
1261
+ "nl",
1262
+ "sr",
1263
+ "th",
1264
+ "ku",
1265
+ "yo",
1266
+ "uz",
1267
+ "ms",
1268
+ "ig",
1269
+ "ne",
1270
+ "tl",
1271
+ "hu",
1272
+ "az",
1273
+ "si",
1274
+ "el",
1275
+ "cs",
1276
+ "ny",
1277
+ "rw",
1278
+ "zu",
1279
+ "bg",
1280
+ "sv",
1281
+ "ln",
1282
+ "so",
1283
+ "kk",
1284
+ "be"
1285
+ ]);
1286
+ const LANG_CODE_TO_EN_NAME = {
1287
+ "eng": "English",
1288
+ "cmn": "Simplified Mandarin Chinese",
1289
+ "cmn-Hant": "Traditional Mandarin Chinese",
1290
+ "yue": "Cantonese",
1291
+ "spa": "Spanish",
1292
+ "rus": "Russian",
1293
+ "arb": "Standard Arabic",
1294
+ "ben": "Bengali",
1295
+ "hin": "Hindi",
1296
+ "por": "Portuguese",
1297
+ "ind": "Indonesian",
1298
+ "jpn": "Japanese",
1299
+ "fra": "French",
1300
+ "deu": "German",
1301
+ "jav": "Javanese (Javanese)",
1302
+ "kor": "Korean",
1303
+ "tel": "Telugu",
1304
+ "vie": "Vietnamese",
1305
+ "mar": "Marathi",
1306
+ "ita": "Italian",
1307
+ "tam": "Tamil",
1308
+ "tur": "Turkish",
1309
+ "urd": "Urdu",
1310
+ "guj": "Gujarati",
1311
+ "pol": "Polish",
1312
+ "ukr": "Ukrainian",
1313
+ "kan": "Kannada",
1314
+ "mai": "Maithili",
1315
+ "mal": "Malayalam",
1316
+ "pes": "Iranian Persian",
1317
+ "mya": "Burmese",
1318
+ "swh": "Swahili (individual language)",
1319
+ "sun": "Sundanese",
1320
+ "ron": "Romanian",
1321
+ "pan": "Panjabi",
1322
+ "bho": "Bhojpuri",
1323
+ "amh": "Amharic",
1324
+ "hau": "Hausa",
1325
+ "fuv": "Nigerian Fulfulde",
1326
+ "bos": "Bosnian (Cyrillic)",
1327
+ "hrv": "Croatian",
1328
+ "nld": "Dutch",
1329
+ "srp": "Serbian (Cyrillic)",
1330
+ "tha": "Thai",
1331
+ "ckb": "Central Kurdish",
1332
+ "yor": "Yoruba",
1333
+ "uzn": "Northern Uzbek (Cyrillic)",
1334
+ "zlm": "Malay (individual language) (Arabic)",
1335
+ "ibo": "Igbo",
1336
+ "npi": "Nepali (individual language)",
1337
+ "ceb": "Cebuano",
1338
+ "skr": "Saraiki",
1339
+ "tgl": "Tagalog",
1340
+ "hun": "Hungarian",
1341
+ "azj": "North Azerbaijani (Cyrillic)",
1342
+ "sin": "Sinhala",
1343
+ "koi": "Komi-Permyak",
1344
+ "ell": "Modern Greek (1453-)",
1345
+ "ces": "Czech",
1346
+ "mag": "Magahi",
1347
+ "run": "Rundi",
1348
+ "bel": "Belarusian",
1349
+ "plt": "Plateau Malagasy",
1350
+ "qug": "Chimborazo Highland Quichua",
1351
+ "mad": "Madurese",
1352
+ "nya": "Nyanja",
1353
+ "zyb": "Yongbei Zhuang",
1354
+ "pbu": "Northern Pashto",
1355
+ "kin": "Kinyarwanda",
1356
+ "zul": "Zulu",
1357
+ "bul": "Bulgarian",
1358
+ "swe": "Swedish",
1359
+ "lin": "Lingala",
1360
+ "som": "Somali",
1361
+ "hms": "Southern Qiandong Miao",
1362
+ "hnj": "Hmong Njua",
1363
+ "ilo": "Iloko",
1364
+ "kaz": "Kazakh"
1365
+ };
1366
+ const LANG_CODE_TO_LOCALE_NAME = {
1367
+ "eng": "English",
1368
+ "cmn": "简体中文",
1369
+ "cmn-Hant": "繁體中文",
1370
+ "yue": "粵語",
1371
+ "spa": "Español",
1372
+ "rus": "Русский",
1373
+ "arb": "العربية",
1374
+ "ben": "বাংলা",
1375
+ "hin": "हिन्दी",
1376
+ "por": "Português",
1377
+ "ind": "Bahasa Indonesia",
1378
+ "jpn": "日本語",
1379
+ "fra": "Français",
1380
+ "deu": "Deutsch",
1381
+ "jav": "Basa Jawa",
1382
+ "kor": "한국어",
1383
+ "tel": "తెలుగు",
1384
+ "vie": "Tiếng Việt",
1385
+ "mar": "मराठी",
1386
+ "ita": "Italiano",
1387
+ "tam": "தமிழ்",
1388
+ "tur": "Türkçe",
1389
+ "urd": "اردو",
1390
+ "guj": "ગુજરાતી",
1391
+ "pol": "Polski",
1392
+ "ukr": "Українська",
1393
+ "kan": "ಕನ್ನಡ",
1394
+ "mai": "मैथिली",
1395
+ "mal": "മലയാളം",
1396
+ "pes": "فارسی",
1397
+ "mya": "မြန်မာစာ",
1398
+ "swh": "Kiswahili",
1399
+ "sun": "Basa Sunda",
1400
+ "ron": "Română",
1401
+ "pan": "ਪੰਜਾਬੀ",
1402
+ "bho": "भोजपुरी",
1403
+ "amh": "አማርኛ",
1404
+ "hau": "Hausa",
1405
+ "fuv": "Fulfulde",
1406
+ "bos": "Босански",
1407
+ "hrv": "Hrvatski",
1408
+ "nld": "Nederlands",
1409
+ "srp": "Српски",
1410
+ "tha": "ไทย",
1411
+ "ckb": "کوردیی ناوەندی",
1412
+ "yor": "Yorùbá",
1413
+ "uzn": "Ўзбекча",
1414
+ "zlm": "بهاس ملايو",
1415
+ "ibo": "Asụsụ Igbo",
1416
+ "npi": "नेपाली",
1417
+ "ceb": "Cebuano",
1418
+ "skr": "سرائیکی",
1419
+ "tgl": "Tagalog",
1420
+ "hun": "Magyar",
1421
+ "azj": "Азәрбајҹан дили",
1422
+ "sin": "සිංහල",
1423
+ "koi": "Перем Коми кыв",
1424
+ "ell": "Ελληνικά",
1425
+ "ces": "Čeština",
1426
+ "mag": "मगही",
1427
+ "run": "Ikirundi",
1428
+ "bel": "Беларуская",
1429
+ "plt": "Fiteny Malagasy",
1430
+ "qug": "Kichwa",
1431
+ "mad": "Madhurâ",
1432
+ "nya": "Chinyanja",
1433
+ "zyb": "Yongbei Bouxcuengh",
1434
+ "pbu": "پښتو",
1435
+ "kin": "Kinyarwanda",
1436
+ "zul": "isiZulu",
1437
+ "bul": "Български",
1438
+ "swe": "Svenska",
1439
+ "lin": "Lingála",
1440
+ "som": "Af Soomaali",
1441
+ "hms": "Hmongb Shuad",
1442
+ "hnj": "Hmong Njua",
1443
+ "ilo": "Ilokano",
1444
+ "kaz": "Қазақ тілі"
1445
+ };
1446
+ const ISO6393_TO_6391 = {
1447
+ "eng": "en",
1448
+ "cmn": "zh",
1449
+ "cmn-Hant": "zh-TW",
1450
+ "yue": "zh",
1451
+ "spa": "es",
1452
+ "rus": "ru",
1453
+ "arb": "ar",
1454
+ "ben": "bn",
1455
+ "hin": "hi",
1456
+ "por": "pt",
1457
+ "ind": "id",
1458
+ "jpn": "ja",
1459
+ "fra": "fr",
1460
+ "deu": "de",
1461
+ "jav": "jv",
1462
+ "kor": "ko",
1463
+ "tel": "te",
1464
+ "vie": "vi",
1465
+ "mar": "mr",
1466
+ "ita": "it",
1467
+ "tam": "ta",
1468
+ "tur": "tr",
1469
+ "urd": "ur",
1470
+ "guj": "gu",
1471
+ "pol": "pl",
1472
+ "ukr": "uk",
1473
+ "kan": "kn",
1474
+ "mai": void 0,
1475
+ "mal": "ml",
1476
+ "pes": "fa",
1477
+ "mya": "my",
1478
+ "swh": "sw",
1479
+ "sun": "su",
1480
+ "ron": "ro",
1481
+ "pan": "pa",
1482
+ "bho": void 0,
1483
+ "amh": "am",
1484
+ "hau": "ha",
1485
+ "fuv": "ff",
1486
+ "bos": "bs",
1487
+ "hrv": "hr",
1488
+ "nld": "nl",
1489
+ "srp": "sr",
1490
+ "tha": "th",
1491
+ "ckb": "ku",
1492
+ "yor": "yo",
1493
+ "uzn": "uz",
1494
+ "zlm": "ms",
1495
+ "ibo": "ig",
1496
+ "npi": "ne",
1497
+ "ceb": void 0,
1498
+ "skr": void 0,
1499
+ "tgl": "tl",
1500
+ "hun": "hu",
1501
+ "azj": "az",
1502
+ "sin": "si",
1503
+ "koi": void 0,
1504
+ "ell": "el",
1505
+ "ces": "cs",
1506
+ "mag": void 0,
1507
+ "run": void 0,
1508
+ "bel": "be",
1509
+ "plt": void 0,
1510
+ "qug": void 0,
1511
+ "mad": void 0,
1512
+ "nya": "ny",
1513
+ "zyb": void 0,
1514
+ "pbu": void 0,
1515
+ "kin": "rw",
1516
+ "zul": "zu",
1517
+ "bul": "bg",
1518
+ "swe": "sv",
1519
+ "lin": "ln",
1520
+ "som": "so",
1521
+ "hms": void 0,
1522
+ "hnj": void 0,
1523
+ "ilo": void 0,
1524
+ "kaz": "kk"
1525
+ };
1526
+ const LOCALE_TO_ISO6393 = {
1527
+ en: "eng",
1528
+ zh: "cmn"
1529
+ };
1530
+ const langLevel = z.enum([
1531
+ "beginner",
1532
+ "intermediate",
1533
+ "advanced"
1534
+ ]);
1535
+ const RTL_LANG_CODES = [
1536
+ "arb",
1537
+ "urd",
1538
+ "pes",
1539
+ "ckb",
1540
+ "zlm",
1541
+ "skr",
1542
+ "pbu"
1543
+ ];
1544
+
1545
+ //#endregion
1546
+ export { APP_NAME, AUTH_BASE_PATH, AUTH_COOKIE_PATTERNS, AUTH_DOMAINS, CHROME_EXTENSION_ORIGIN, EDGE_EXTENSION_ORIGIN, ISO6393_TO_6391, LANG_CODE_ISO6393_OPTIONS, LANG_CODE_TO_EN_NAME, LANG_CODE_TO_LOCALE_NAME, LANG_DICTIONARY_LABELS, LOCALE_TO_ISO6393, LOCALHOST_DOMAIN, READFROG_DOMAIN, RTL_LANG_CODES, SEMANTIC_VERSION_REGEX, TRUSTED_ORIGINS, WEBSITE_DEV_PORT, WEBSITE_DEV_URL, WEBSITE_PROD_URL, getVersionType, langCodeISO6391Schema, langCodeISO6393Schema, langLevel, parseSemanticVersion, semanticVersionSchema };