@read-frog/definitions 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,183 @@
1
+ import type { LangCodeISO6393 } from "../languages"
2
+
3
+ export const LANG_CODE_TO_ZH_NAME = {
4
+ "eng": "英语",
5
+ "cmn": "简体中文",
6
+ "cmn-Hant": "繁体中文",
7
+ "yue": "粤语",
8
+ "spa": "西班牙语",
9
+ "rus": "俄语",
10
+ "arb": "阿拉伯语",
11
+ "ben": "孟加拉语",
12
+ "hin": "印地语",
13
+ "por": "葡萄牙语",
14
+ "ind": "印尼语",
15
+ "jpn": "日语",
16
+ "fra": "法语",
17
+ "deu": "德语",
18
+ "jav": "爪哇语",
19
+ "kor": "韩语",
20
+ "tel": "泰卢固语",
21
+ "vie": "越南语",
22
+ "mar": "马拉地语",
23
+ "ita": "意大利语",
24
+ "tam": "泰米尔语",
25
+ "tur": "土耳其语",
26
+ "urd": "乌尔都语",
27
+ "guj": "古吉拉特语",
28
+ "pol": "波兰语",
29
+ "ukr": "乌克兰语",
30
+ "kan": "坎纳达语",
31
+ "mai": "迈蒂利语",
32
+ "mal": "马拉雅拉姆语",
33
+ "pes": "波斯语",
34
+ "mya": "缅甸语",
35
+ "swh": "斯瓦希里语",
36
+ "sun": "巽他语",
37
+ "ron": "罗马尼亚语",
38
+ "pan": "旁遮普语",
39
+ "bho": "博杰普尔语",
40
+ "amh": "阿姆哈拉语",
41
+ "hau": "豪萨语",
42
+ "fuv": "富拉语",
43
+ "bos": "波斯尼亚语",
44
+ "hrv": "克罗地亚语",
45
+ "nld": "荷兰语",
46
+ "srp": "塞尔维亚语",
47
+ "tha": "泰语",
48
+ "ckb": "库尔德语",
49
+ "yor": "约鲁巴语",
50
+ "uzn": "乌兹别克语",
51
+ "zlm": "马来语",
52
+ "ibo": "伊博语",
53
+ "npi": "尼泊尔语",
54
+ "ceb": "宿务语",
55
+ "skr": "旁遮普语",
56
+ "tgl": "塔加路语",
57
+ "hun": "匈牙利语",
58
+ "azj": "北阿塞拜疆语",
59
+ "sin": "僧伽罗语",
60
+ "koi": "科米-彼尔姆语",
61
+ "ell": "现代希腊语",
62
+ "ces": "捷克语",
63
+ "mag": "马加哈语",
64
+ "run": "鲁恩达语",
65
+ "bel": "白俄罗斯语",
66
+ "plt": "高原马达加斯加语",
67
+ "qug": "奇布查语",
68
+ "mad": "马都拉语",
69
+ "nya": "尼扬加语",
70
+ "zyb": "壮语",
71
+ "pbu": "北部普什图语",
72
+ "kin": "基尼亚卢旺达语",
73
+ "zul": "祖鲁语",
74
+ "bul": "保加利亚语",
75
+ "swe": "瑞典语",
76
+ "lin": "林加拉语",
77
+ "som": "索马里语",
78
+ "hms": "南部乾东苗语",
79
+ "hnj": "苗族北部语",
80
+ "ilo": "伊洛卡诺语",
81
+ "kaz": "哈萨克语",
82
+ "heb": "希伯来语",
83
+ "nob": "书面挪威语",
84
+ "nno": "新挪威语",
85
+ "afr": "南非荷兰语",
86
+ "sqi": "阿尔巴尼亚语",
87
+ "asm": "阿萨姆语",
88
+ "eus": "巴斯克语",
89
+ "bre": "布列塔尼语",
90
+ "cat": "加泰罗尼亚语",
91
+ "cos": "科西嘉语",
92
+ "cym": "威尔士语",
93
+ "dan": "丹麦语",
94
+ "div": "迪维希语",
95
+ "epo": "世界语",
96
+ "ekk": "爱沙尼亚语",
97
+ "fao": "法罗语",
98
+ "fij": "斐济语",
99
+ "fin": "芬兰语",
100
+ "fry": "西弗里西亚语",
101
+ "gla": "苏格兰盖尔语",
102
+ "gle": "爱尔兰语",
103
+ "glg": "加利西亚语",
104
+ "grn": "瓜拉尼语",
105
+ "hat": "海地克里奥尔语",
106
+ "haw": "夏威夷语",
107
+ "hye": "亚美尼亚语",
108
+ "ido": "伊多语",
109
+ "ina": "国际辅助语",
110
+ "isl": "冰岛语",
111
+ "kat": "格鲁吉亚语",
112
+ "khm": "高棉语",
113
+ "kir": "吉尔吉斯语",
114
+ "lao": "老挝语",
115
+ "lat": "拉丁语",
116
+ "lvs": "拉脱维亚语",
117
+ "lit": "立陶宛语",
118
+ "ltz": "卢森堡语",
119
+ "mkd": "马其顿语",
120
+ "mlt": "马耳他语",
121
+ "mon": "蒙古语",
122
+ "mri": "毛利语",
123
+ "nso": "北索托语",
124
+ "oci": "奥克语",
125
+ "ori": "奥里亚语",
126
+ "orm": "奥罗莫语",
127
+ "prs": "达里语",
128
+ "san": "梵语",
129
+ "slk": "斯洛伐克语",
130
+ "slv": "斯洛文尼亚语",
131
+ "smo": "萨摩亚语",
132
+ "sna": "绍纳语",
133
+ "snd": "信德语",
134
+ "sot": "南索托语",
135
+ "tah": "塔希提语",
136
+ "tat": "鞑靼语",
137
+ "tgk": "塔吉克语",
138
+ "tir": "提格雷尼亚语",
139
+ "ton": "汤加语",
140
+ "tsn": "茨瓦纳语",
141
+ "tuk": "土库曼语",
142
+ "uig": "维吾尔语",
143
+ "vol": "沃拉普克语",
144
+ "wol": "沃洛夫语",
145
+ "xho": "科萨语",
146
+ "ydd": "东意第绪语",
147
+ "aka": "阿坎语",
148
+ "bam": "班巴拉语",
149
+ "bis": "比斯拉马语",
150
+ "bod": "藏语",
151
+ "che": "车臣语",
152
+ "chv": "楚瓦什语",
153
+ "dzo": "宗喀语",
154
+ "ewe": "埃维语",
155
+ "kab": "卡拜尔语",
156
+ "lug": "卢干达语",
157
+ "oss": "奥塞梯语",
158
+ "ssw": "斯瓦蒂语",
159
+ "ven": "文达语",
160
+ "war": "瓦瑞语",
161
+ "nde": "北恩德贝勒语",
162
+ "nbl": "南恩德贝勒语",
163
+ "pam": "邦板牙语",
164
+ "hil": "希利盖农语",
165
+ "bcl": "中比科尔语",
166
+ "min": "米南佳保语",
167
+ "ace": "亚齐语",
168
+ "bug": "布吉语",
169
+ "ban": "巴厘语",
170
+ "bjn": "班贾尔语",
171
+ "mak": "望加锡语",
172
+ "sas": "萨萨克语",
173
+ "tet": "德顿语",
174
+ "cha": "查莫罗语",
175
+ "niu": "纽埃语",
176
+ "tvl": "图瓦卢语",
177
+ "gil": "吉尔伯特语",
178
+ "mah": "马绍尔语",
179
+ "pau": "帕劳语",
180
+ "wls": "瓦利斯语",
181
+ "rar": "拉罗汤加语",
182
+ "hif": "斐济印地语",
183
+ } satisfies Record<LangCodeISO6393, string>
@@ -333,369 +333,9 @@ export type LangCodeISO6391 = z.infer<typeof langCodeISO6391Schema>
333
333
 
334
334
  export type LangCodeISO6393 = z.infer<typeof langCodeISO6393Schema>
335
335
 
336
- export const LANG_CODE_TO_EN_NAME: Record<LangCodeISO6393, string> = {
337
- "eng": "English",
338
- "cmn": "Simplified Mandarin Chinese",
339
- "cmn-Hant": "Traditional Mandarin Chinese",
340
- "yue": "Cantonese", // not supported by franc-min
341
- "spa": "Spanish",
342
- "rus": "Russian",
343
- "arb": "Standard Arabic",
344
- "ben": "Bengali",
345
- "hin": "Hindi",
346
- "por": "Portuguese",
347
- "ind": "Indonesian",
348
- "jpn": "Japanese",
349
- "fra": "French",
350
- "deu": "German",
351
- "jav": "Javanese (Javanese)",
352
- "kor": "Korean",
353
- "tel": "Telugu",
354
- "vie": "Vietnamese",
355
- "mar": "Marathi",
356
- "ita": "Italian",
357
- "tam": "Tamil",
358
- "tur": "Turkish",
359
- "urd": "Urdu",
360
- "guj": "Gujarati",
361
- "pol": "Polish",
362
- "ukr": "Ukrainian",
363
- "kan": "Kannada",
364
- "mai": "Maithili",
365
- "mal": "Malayalam",
366
- "pes": "Iranian Persian",
367
- "mya": "Burmese",
368
- "swh": "Swahili (individual language)",
369
- "sun": "Sundanese",
370
- "ron": "Romanian",
371
- "pan": "Panjabi",
372
- "bho": "Bhojpuri",
373
- "amh": "Amharic",
374
- "hau": "Hausa",
375
- "fuv": "Nigerian Fulfulde",
376
- "bos": "Bosnian (Cyrillic)",
377
- "hrv": "Croatian",
378
- "nld": "Dutch",
379
- "srp": "Serbian (Cyrillic)",
380
- "tha": "Thai",
381
- "ckb": "Central Kurdish",
382
- "yor": "Yoruba",
383
- "uzn": "Northern Uzbek (Cyrillic)",
384
- "zlm": "Malay (individual language) (Arabic)",
385
- "ibo": "Igbo",
386
- "npi": "Nepali (individual language)",
387
- "ceb": "Cebuano",
388
- "skr": "Saraiki",
389
- "tgl": "Tagalog",
390
- "hun": "Hungarian",
391
- "azj": "North Azerbaijani (Cyrillic)",
392
- "sin": "Sinhala",
393
- "koi": "Komi-Permyak",
394
- "ell": "Modern Greek (1453-)",
395
- "ces": "Czech",
396
- "mag": "Magahi",
397
- "run": "Rundi",
398
- "bel": "Belarusian",
399
- "plt": "Plateau Malagasy",
400
- "qug": "Chimborazo Highland Quichua",
401
- "mad": "Madurese",
402
- "nya": "Nyanja",
403
- "zyb": "Yongbei Zhuang",
404
- "pbu": "Northern Pashto",
405
- "kin": "Kinyarwanda",
406
- "zul": "Zulu",
407
- "bul": "Bulgarian",
408
- "swe": "Swedish",
409
- "lin": "Lingala",
410
- "som": "Somali",
411
- "hms": "Southern Qiandong Miao",
412
- "hnj": "Hmong Njua",
413
- "ilo": "Iloko",
414
- "kaz": "Kazakh",
415
- "heb": "Hebrew",
416
- "nob": "Norwegian Bokmål",
417
- "nno": "Norwegian Nynorsk",
418
- "afr": "Afrikaans",
419
- "sqi": "Albanian",
420
- "asm": "Assamese",
421
- "eus": "Basque",
422
- "bre": "Breton",
423
- "cat": "Catalan",
424
- "cos": "Corsican",
425
- "cym": "Welsh",
426
- "dan": "Danish",
427
- "div": "Divehi",
428
- "epo": "Esperanto",
429
- "ekk": "Estonian",
430
- "fao": "Faroese",
431
- "fij": "Fijian",
432
- "fin": "Finnish",
433
- "fry": "Western Frisian",
434
- "gla": "Scottish Gaelic",
435
- "gle": "Irish",
436
- "glg": "Galician",
437
- "grn": "Guarani",
438
- "hat": "Haitian Creole",
439
- "haw": "Hawaiian",
440
- "hye": "Armenian",
441
- "ido": "Ido",
442
- "ina": "Interlingua",
443
- "isl": "Icelandic",
444
- "kat": "Georgian",
445
- "khm": "Khmer",
446
- "kir": "Kyrgyz",
447
- "lao": "Lao",
448
- "lat": "Latin",
449
- "lvs": "Latvian",
450
- "lit": "Lithuanian",
451
- "ltz": "Luxembourgish",
452
- "mkd": "Macedonian",
453
- "mlt": "Maltese",
454
- "mon": "Mongolian",
455
- "mri": "Maori",
456
- "nso": "Northern Sotho",
457
- "oci": "Occitan",
458
- "ori": "Odia",
459
- "orm": "Oromo",
460
- "prs": "Dari",
461
- "san": "Sanskrit",
462
- "slk": "Slovak",
463
- "slv": "Slovenian",
464
- "smo": "Samoan",
465
- "sna": "Shona",
466
- "snd": "Sindhi",
467
- "sot": "Southern Sotho",
468
- "tah": "Tahitian",
469
- "tat": "Tatar",
470
- "tgk": "Tajik",
471
- "tir": "Tigrinya",
472
- "ton": "Tongan",
473
- "tsn": "Tswana",
474
- "tuk": "Turkmen",
475
- "uig": "Uyghur",
476
- "vol": "Volapük",
477
- "wol": "Wolof",
478
- "xho": "Xhosa",
479
- "ydd": "Eastern Yiddish",
480
- "aka": "Akan",
481
- "bam": "Bambara",
482
- "bis": "Bislama",
483
- "bod": "Tibetan",
484
- "che": "Chechen",
485
- "chv": "Chuvash",
486
- "dzo": "Dzongkha",
487
- "ewe": "Ewe",
488
- "kab": "Kabyle",
489
- "lug": "Ganda",
490
- "oss": "Ossetian",
491
- "ssw": "Swati",
492
- "ven": "Venda",
493
- "war": "Waray",
494
- "nde": "North Ndebele",
495
- "nbl": "South Ndebele",
496
- "pam": "Pampanga",
497
- "hil": "Hiligaynon",
498
- "bcl": "Central Bikol",
499
- "min": "Minangkabau",
500
- "ace": "Acehnese",
501
- "bug": "Buginese",
502
- "ban": "Balinese",
503
- "bjn": "Banjar",
504
- "mak": "Makasar",
505
- "sas": "Sasak",
506
- "tet": "Tetum",
507
- "cha": "Chamorro",
508
- "niu": "Niuean",
509
- "tvl": "Tuvaluan",
510
- "gil": "Gilbertese",
511
- "mah": "Marshallese",
512
- "pau": "Palauan",
513
- "wls": "Wallisian",
514
- "rar": "Rarotongan",
515
- "hif": "Fiji Hindi",
516
- }
517
-
518
- export const LANG_CODE_TO_LOCALE_NAME: Record<LangCodeISO6393, string> = {
519
- "eng": "English",
520
- "cmn": "简体中文",
521
- "cmn-Hant": "繁體中文",
522
- "yue": "粵語",
523
- "spa": "Español",
524
- "rus": "Русский",
525
- "arb": "العربية",
526
- "ben": "বাংলা",
527
- "hin": "हिन्दी",
528
- "por": "Português",
529
- "ind": "Bahasa Indonesia",
530
- "jpn": "日本語",
531
- "fra": "Français",
532
- "deu": "Deutsch",
533
- "jav": "Basa Jawa",
534
- "kor": "한국어",
535
- "tel": "తెలుగు",
536
- "vie": "Tiếng Việt",
537
- "mar": "मराठी",
538
- "ita": "Italiano",
539
- "tam": "தமிழ்",
540
- "tur": "Türkçe",
541
- "urd": "اردو",
542
- "guj": "ગુજરાતી",
543
- "pol": "Polski",
544
- "ukr": "Українська",
545
- "kan": "ಕನ್ನಡ",
546
- "mai": "मैथिली",
547
- "mal": "മലയാളം",
548
- "pes": "فارسی",
549
- "mya": "မြန်မာစာ",
550
- "swh": "Kiswahili",
551
- "sun": "Basa Sunda",
552
- "ron": "Română",
553
- "pan": "ਪੰਜਾਬੀ",
554
- "bho": "भोजपुरी",
555
- "amh": "አማርኛ",
556
- "hau": "Hausa",
557
- "fuv": "Fulfulde",
558
- "bos": "Босански",
559
- "hrv": "Hrvatski",
560
- "nld": "Nederlands",
561
- "srp": "Српски",
562
- "tha": "ไทย",
563
- "ckb": "کوردیی ناوەندی",
564
- "yor": "Yorùbá",
565
- "uzn": "Ўзбекча",
566
- "zlm": "بهاس ملايو",
567
- "ibo": "Asụsụ Igbo",
568
- "npi": "नेपाली",
569
- "ceb": "Cebuano",
570
- "skr": "سرائیکی",
571
- "tgl": "Tagalog",
572
- "hun": "Magyar",
573
- "azj": "Азәрбајҹан дили",
574
- "sin": "සිංහල",
575
- "koi": "Перем Коми кыв",
576
- "ell": "Ελληνικά",
577
- "ces": "Čeština",
578
- "mag": "मगही",
579
- "run": "Ikirundi",
580
- "bel": "Беларуская",
581
- "plt": "Fiteny Malagasy",
582
- "qug": "Kichwa",
583
- "mad": "Madhurâ",
584
- "nya": "Chinyanja",
585
- "zyb": "Yongbei Bouxcuengh",
586
- "pbu": "پښتو",
587
- "kin": "Kinyarwanda",
588
- "zul": "isiZulu",
589
- "bul": "Български",
590
- "swe": "Svenska",
591
- "lin": "Lingála",
592
- "som": "Af Soomaali",
593
- "hms": "Hmongb Shuad",
594
- "hnj": "Hmong Njua",
595
- "ilo": "Ilokano",
596
- "kaz": "Қазақ тілі",
597
- "heb": "עברית",
598
- "nob": "Norsk bokmål",
599
- "nno": "Norsk nynorsk",
600
- "afr": "Afrikaans",
601
- "sqi": "Shqip",
602
- "asm": "অসমীয়া",
603
- "eus": "Euskara",
604
- "bre": "Brezhoneg",
605
- "cat": "Català",
606
- "cos": "Corsu",
607
- "cym": "Cymraeg",
608
- "dan": "Dansk",
609
- "div": "ދިވެހި",
610
- "epo": "Esperanto",
611
- "ekk": "Eesti",
612
- "fao": "Føroyskt",
613
- "fij": "Vosa Vakaviti",
614
- "fin": "Suomi",
615
- "fry": "Frysk",
616
- "gla": "Gàidhlig",
617
- "gle": "Gaeilge",
618
- "glg": "Galego",
619
- "grn": "Avañeʼẽ",
620
- "hat": "Kreyòl ayisyen",
621
- "haw": "ʻŌlelo Hawaiʻi",
622
- "hye": "Հایերен",
623
- "ido": "Ido",
624
- "ina": "Interlingua",
625
- "isl": "Íslenska",
626
- "kat": "ქართული",
627
- "khm": "ភាសាខ្មែរ",
628
- "kir": "Кыргызча",
629
- "lao": "ພາສາລາວ",
630
- "lat": "Latina",
631
- "lvs": "Latviešu",
632
- "lit": "Lietuvių",
633
- "ltz": "Lëtzebuergesch",
634
- "mkd": "Македонски",
635
- "mlt": "Malti",
636
- "mon": "Монгол",
637
- "mri": "Te Reo Māori",
638
- "nso": "Sesotho sa Leboa",
639
- "oci": "Occitan",
640
- "ori": "ଓଡ଼ିଆ",
641
- "orm": "Oromoo",
642
- "prs": "دری",
643
- "san": "संस्कृतम्",
644
- "slk": "Slovenčina",
645
- "slv": "Slovenščina",
646
- "smo": "Gagana Samoa",
647
- "sna": "chiShona",
648
- "snd": "سنڌي",
649
- "sot": "Sesotho",
650
- "tah": "Reo Tahiti",
651
- "tat": "Татарча",
652
- "tgk": "Тоҷикӣ",
653
- "tir": "ትግርኛ",
654
- "ton": "Lea fakatonga",
655
- "tsn": "Setswana",
656
- "tuk": "Türkmençe",
657
- "uig": "ئۇيغۇرچە",
658
- "vol": "Volapük",
659
- "wol": "Wolof",
660
- "xho": "isiXhosa",
661
- "ydd": "ייִדיש",
662
- "aka": "Akan",
663
- "bam": "Bamanankan",
664
- "bis": "Bislama",
665
- "bod": "བོད་སྐད",
666
- "che": "Нохчийн",
667
- "chv": "Чӑвашла",
668
- "dzo": "རྫོང་ཁ",
669
- "ewe": "Eʋegbe",
670
- "kab": "Taqbaylit",
671
- "lug": "Luganda",
672
- "oss": "Ирон",
673
- "ssw": "SiSwati",
674
- "ven": "Tshivenḓa",
675
- "war": "Winaray",
676
- "nde": "isiNdebele",
677
- "nbl": "isiNdebele seSewula",
678
- "pam": "Kapampangan",
679
- "hil": "Ilonggo",
680
- "bcl": "Bikol Sentral",
681
- "min": "Baso Minangkabau",
682
- "ace": "Bahsa Acèh",
683
- "bug": "Basa Ugi",
684
- "ban": "Basa Bali",
685
- "bjn": "Bahasa Banjar",
686
- "mak": "Basa Mangkasara",
687
- "sas": "Sasak",
688
- "tet": "Tetun",
689
- "cha": "Chamoru",
690
- "niu": "Vagahau Niuē",
691
- "tvl": "Te Gana Tuvalu",
692
- "gil": "Taetae ni Kiribati",
693
- "mah": "Kajin Majel",
694
- "pau": "A tekoi er a Belau",
695
- "wls": "Fakaʻuvea",
696
- "rar": "Māori Kūki ʻĀirani",
697
- "hif": "फ़िजी हिंदी",
698
- }
336
+ export * from "./language-names/en"
337
+ export * from "./language-names/locale"
338
+ export * from "./language-names/zh"
699
339
 
700
340
  export const ISO6393_TO_6391: Record<LangCodeISO6393, LangCodeISO6391 | undefined> = {
701
341
  "eng": "en",
@@ -1,17 +1,17 @@
1
1
  import { z } from "zod"
2
2
 
3
3
  // Source of truth - can be iterated at runtime
4
- export const COLUMN_TYPES = ["string", "number", "boolean", "date", "select"] as const
4
+ export const NOTEBASE_COLUMN_TYPES = ["string", "number", "boolean", "date", "select"] as const
5
5
 
6
- export type ColumnType = (typeof COLUMN_TYPES)[number]
6
+ export type NotebaseColumnType = (typeof NOTEBASE_COLUMN_TYPES)[number]
7
7
 
8
- export const selectOptionSchema = z.object({
8
+ export const notebaseSelectOptionSchema = z.object({
9
9
  id: z.string(),
10
10
  value: z.string(),
11
11
  color: z.string().regex(/^#[0-9a-f]{6}$/i, "Color must be a valid hex color"),
12
12
  })
13
13
 
14
- export const columnConfigSchema = z.discriminatedUnion("type", [
14
+ export const notebaseColumnConfigSchema = z.discriminatedUnion("type", [
15
15
  z.object({ type: z.literal("string") }),
16
16
  z.object({
17
17
  type: z.literal("number"),
@@ -25,17 +25,17 @@ export const columnConfigSchema = z.discriminatedUnion("type", [
25
25
  }),
26
26
  z.object({
27
27
  type: z.literal("select"),
28
- options: z.array(selectOptionSchema).default([]),
28
+ options: z.array(notebaseSelectOptionSchema).default([]),
29
29
  }),
30
30
  ])
31
31
 
32
- export type ColumnConfig = z.infer<typeof columnConfigSchema>
33
- export type SelectOption = z.infer<typeof selectOptionSchema>
32
+ export type NotebaseColumnConfig = z.infer<typeof notebaseColumnConfigSchema>
33
+ export type NotebaseSelectOption = z.infer<typeof notebaseSelectOptionSchema>
34
34
 
35
35
  // Column type metadata (label, default config)
36
- export const COLUMN_TYPE_INFO: Record<
37
- ColumnType,
38
- { label: string, defaultConfig: ColumnConfig }
36
+ export const NOTEBASE_COLUMN_TYPE_INFO: Record<
37
+ NotebaseColumnType,
38
+ { label: string, defaultConfig: NotebaseColumnConfig }
39
39
  > = {
40
40
  string: { label: "Text", defaultConfig: { type: "string" } },
41
41
  number: {
@@ -48,13 +48,13 @@ export const COLUMN_TYPE_INFO: Record<
48
48
  }
49
49
 
50
50
  export function isNumberConfig(
51
- config: ColumnConfig,
52
- ): config is Extract<ColumnConfig, { type: "number" }> {
51
+ config: NotebaseColumnConfig,
52
+ ): config is Extract<NotebaseColumnConfig, { type: "number" }> {
53
53
  return config.type === "number"
54
54
  }
55
55
 
56
56
  export function isSelectConfig(
57
- config: ColumnConfig,
58
- ): config is Extract<ColumnConfig, { type: "select" }> {
57
+ config: NotebaseColumnConfig,
58
+ ): config is Extract<NotebaseColumnConfig, { type: "select" }> {
59
59
  return config.type === "select"
60
60
  }
@@ -0,0 +1,68 @@
1
+ import { z } from "zod"
2
+
3
+ const srsStepPattern = /^[1-9]\d*[mhd]$/
4
+
5
+ export const REVIEW_RATING_VALUES = [
6
+ "again",
7
+ "hard",
8
+ "good",
9
+ "easy",
10
+ ] as const
11
+
12
+ export const reviewRatingSchema = z.enum(REVIEW_RATING_VALUES)
13
+ export type ReviewRating = z.infer<typeof reviewRatingSchema>
14
+
15
+ export const SRS_REVIEW_DURATION_MS_MAX = 180_000
16
+
17
+ export const srsStepSchema = z.templateLiteral([
18
+ z.number(),
19
+ z.enum(["m", "h", "d"]),
20
+ ]).refine(
21
+ step => srsStepPattern.test(step),
22
+ "Expected a positive integer step like \"1m\", \"10m\", \"1h\", or \"1d\"",
23
+ )
24
+
25
+ export type SrsStep = z.infer<typeof srsStepSchema>
26
+
27
+ export const srsWeightsSchema = z.array(z.number())
28
+
29
+ export const schedulingParamsShape = {
30
+ newPerDay: z.number().int().gte(-1),
31
+ reviewsPerDay: z.number().int().gte(-1),
32
+ desiredRetention: z.number().gt(0).lte(1),
33
+ enableShortTerm: z.boolean(),
34
+ maximumInterval: z.number().int().positive(),
35
+ learningSteps: z.array(srsStepSchema),
36
+ relearningSteps: z.array(srsStepSchema),
37
+ leechThreshold: z.number().int().positive(),
38
+ enableFuzz: z.boolean(),
39
+ weights: srsWeightsSchema.optional(),
40
+ } satisfies z.ZodRawShape
41
+
42
+ export const schedulingParamsSchema = z.object(schedulingParamsShape).strict()
43
+ export type SchedulingParams = z.infer<typeof schedulingParamsSchema>
44
+
45
+ export const DEFAULT_SRS_SCHEDULING_PARAMS = {
46
+ newPerDay: 20,
47
+ reviewsPerDay: 200,
48
+ desiredRetention: 0.9,
49
+ enableShortTerm: true,
50
+ maximumInterval: 36500,
51
+ learningSteps: ["1m", "10m"],
52
+ relearningSteps: ["10m"],
53
+ leechThreshold: 8,
54
+ enableFuzz: false,
55
+ } satisfies SchedulingParams
56
+
57
+ export const fsrsReviewLogSnapshotSchema = z.object({
58
+ rating: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
59
+ state: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]),
60
+ dueAt: z.string(),
61
+ stability: z.number(),
62
+ difficulty: z.number(),
63
+ scheduledDays: z.number(),
64
+ learningSteps: z.number(),
65
+ review: z.string(),
66
+ }).strict()
67
+
68
+ export type FsrsReviewLogSnapshot = z.infer<typeof fsrsReviewLogSnapshotSchema>