@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.
package/package.json CHANGED
@@ -1,26 +1,37 @@
1
1
  {
2
2
  "name": "@read-frog/definitions",
3
3
  "type": "module",
4
- "version": "0.1.3",
4
+ "version": "0.3.0",
5
5
  "private": false,
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/mengxi-ream/read-frog-monorepo",
9
+ "directory": "packages/definitions"
10
+ },
11
+ "imports": {
12
+ "#/*": "./src/*.ts"
13
+ },
6
14
  "exports": {
7
15
  ".": {
16
+ "types": "./dist/index.d.ts",
8
17
  "import": "./dist/index.js",
9
- "require": "./dist/index.js",
10
- "types": "./dist/index.d.ts"
18
+ "require": "./dist/index.js"
11
19
  }
12
20
  },
13
21
  "main": "./dist/index.js",
14
22
  "types": "./dist/index.d.ts",
15
23
  "files": [
16
- "dist",
17
- "src"
24
+ "dist/**",
25
+ "src/**"
18
26
  ],
19
27
  "dependencies": {
20
- "zod": "^4.3.6"
28
+ "@date-fns/tz": "^1.4.1",
29
+ "date-fns": "^4.1.0",
30
+ "zod": "^4.4.3"
21
31
  },
22
32
  "devDependencies": {
23
- "tsdown": "^0.21.8",
33
+ "tsdown": "^0.22.0",
34
+ "vitest": "^4.1.6",
24
35
  "@repo/eslint-config": "0.0.1",
25
36
  "@repo/tsdown-config": "0.0.0",
26
37
  "@repo/typescript-config": "0.0.0"
@@ -32,7 +43,8 @@
32
43
  "unlink:packages": "pnpm unlink --global",
33
44
  "build:publish": "tsdown",
34
45
  "type-check": "tsc --noEmit",
35
- "lint": "eslint .",
36
- "lint:fix": "eslint --fix"
46
+ "lint": "eslint . --max-warnings 0",
47
+ "lint:fix": "eslint --fix --max-warnings 0",
48
+ "test": "vitest run"
37
49
  }
38
50
  }
@@ -1,4 +1,4 @@
1
- import type { LangCodeISO6393 } from "@/types/languages"
1
+ import type { LangCodeISO6393 } from "#/types/languages"
2
2
 
3
3
  /**
4
4
  * This file is used to assemble a system prompt according to different languages.
@@ -0,0 +1,2 @@
1
+ export const NOTEBASE_COLUMN_MIN_WIDTH = 100
2
+ export const NOTEBASE_COLUMN_MAX_WIDTH = 500
@@ -1,22 +1,2 @@
1
1
  export const CHROME_EXTENSION_ORIGIN = "chrome-extension://modkelfkcfjpgbfmnbnllalkiogfofhb"
2
2
  export const EDGE_EXTENSION_ORIGIN = "extension://cbcbomlgikfbdnoaohcjfledcoklcjbo"
3
-
4
- export const READFROG_DOMAIN = "readfrog.app"
5
- export const LOCALHOST_DOMAIN = "localhost"
6
-
7
- // Browser-accessible TanStack Start dev server.
8
- export const WEBSITE_DEV_PORT = 8888
9
- export const WEBSITE_DEV_URL = `http://localhost:${WEBSITE_DEV_PORT}`
10
-
11
- // Legacy Next.js Caddy proxy kept for compatibility while the old app is still present.
12
- export const CADDY_DEV_PORT = 4433
13
- export const WEBSITE_CADDY_DEV_URL = `https://localhost:${CADDY_DEV_PORT}`
14
-
15
- export const WEBSITE_PROD_URL = "https://www.readfrog.app"
16
- export const TRUSTED_ORIGINS = [CHROME_EXTENSION_ORIGIN, EDGE_EXTENSION_ORIGIN, WEBSITE_PROD_URL]
17
- export const API_DEV_PORT = 7777
18
- export const API_DEV_URL = `http://localhost:${API_DEV_PORT}`
19
- export const API_PROD_URL = "https://api.readfrog.app"
20
-
21
- // Domain constants for cookie monitoring and other domain-based operations
22
- export const AUTH_DOMAINS = [READFROG_DOMAIN, LOCALHOST_DOMAIN] as const
package/src/index.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  export * from "./constants/app"
2
2
  export * from "./constants/auth"
3
3
  export * from "./constants/beta-access"
4
- export * from "./constants/column"
5
4
  export * from "./constants/dictionary"
5
+ export * from "./constants/notebase-column"
6
6
  export * from "./constants/url"
7
7
  export * from "./schemas/cell-value"
8
8
  export * from "./schemas/version"
9
- export * from "./types/column"
9
+ export * from "./types/card"
10
10
  export * from "./types/languages"
11
+ export * from "./types/notebase-column"
12
+ export * from "./types/srs"
13
+ export * from "./utils/srs-day"
@@ -1,4 +1,4 @@
1
- import type { ColumnConfig } from "@/types/column"
1
+ import type { NotebaseColumnConfig } from "#/types/notebase-column"
2
2
 
3
3
  import { z } from "zod"
4
4
 
@@ -6,7 +6,7 @@ import { z } from "zod"
6
6
  * Create a Zod schema for a cell value based on column config.
7
7
  * All cell schemas are nullable (empty cells are valid).
8
8
  */
9
- export function createCellSchema(config: ColumnConfig): z.ZodType {
9
+ export function createCellSchema(config: NotebaseColumnConfig): z.ZodType {
10
10
  switch (config.type) {
11
11
  case "string":
12
12
  return z.string().nullable()
@@ -31,7 +31,7 @@ export function createCellSchema(config: ColumnConfig): z.ZodType {
31
31
  * Each column becomes a field in the object schema.
32
32
  */
33
33
  export function createRowSchema(
34
- columns: Array<{ id: string, name: string, config: ColumnConfig }>,
34
+ columns: Array<{ id: string, name: string, config: NotebaseColumnConfig }>,
35
35
  ): z.ZodObject<Record<string, z.ZodType>> {
36
36
  const shape: Record<string, z.ZodType> = {}
37
37
 
@@ -48,7 +48,7 @@ export function createRowSchema(
48
48
  * Use this when generating prompts for LLMs that support structured outputs.
49
49
  */
50
50
  export function rowSchemaToJsonSchema(
51
- columns: Array<{ id: string, name: string, config: ColumnConfig }>,
51
+ columns: Array<{ id: string, name: string, config: NotebaseColumnConfig }>,
52
52
  ) {
53
53
  return z.toJSONSchema(createRowSchema(columns))
54
54
  }
@@ -0,0 +1,73 @@
1
+ import { z } from "zod"
2
+
3
+ export const CARD_STATE_VALUES = [
4
+ "new",
5
+ "learning",
6
+ "review",
7
+ "relearning",
8
+ ] as const
9
+
10
+ export const SCHEDULE_STATUS_VALUES = [
11
+ "new",
12
+ "learning",
13
+ "review",
14
+ "suspended",
15
+ "buried",
16
+ ] as const
17
+
18
+ export const cardStateSchema = z.enum(CARD_STATE_VALUES)
19
+ export type CardState = z.infer<typeof cardStateSchema>
20
+
21
+ export const scheduleStatusSchema = z.enum(SCHEDULE_STATUS_VALUES)
22
+ export type ScheduleStatus = z.infer<typeof scheduleStatusSchema>
23
+
24
+ export const CARD_STATE_TO_SCHEDULE_STATUS = {
25
+ new: "new",
26
+ learning: "learning",
27
+ relearning: "learning",
28
+ review: "review",
29
+ } satisfies Record<CardState, Extract<ScheduleStatus, "new" | "learning" | "review">>
30
+
31
+ export const basicCardTemplateConfigSchema = z.object({
32
+ type: z.literal("basic"),
33
+ frontPattern: z.string().min(1),
34
+ backPattern: z.string().min(1),
35
+ }).strict()
36
+
37
+ export const cardTemplateConfigSchema = z.discriminatedUnion("type", [
38
+ basicCardTemplateConfigSchema,
39
+ ])
40
+
41
+ export type BasicCardTemplateConfig = z.infer<typeof basicCardTemplateConfigSchema>
42
+ export type CardTemplateConfig = z.infer<typeof cardTemplateConfigSchema>
43
+
44
+ export const cardIdentityShape = {
45
+ id: z.uuid(),
46
+ notebaseId: z.uuid(),
47
+ notebaseRowId: z.uuid(),
48
+ templateId: z.uuid(),
49
+ variantKey: z.string(),
50
+ } satisfies z.ZodRawShape
51
+
52
+ export const cardReviewStateShape = {
53
+ state: cardStateSchema,
54
+ scheduleStatus: scheduleStatusSchema,
55
+ dueAt: z.coerce.date(),
56
+ lastReviewTime: z.coerce.date().nullable(),
57
+ stability: z.number(),
58
+ difficulty: z.number(),
59
+ step: z.number().int(),
60
+ lapses: z.number().int(),
61
+ reps: z.number().int(),
62
+ } satisfies z.ZodRawShape
63
+
64
+ export const cardMemoryStateShape = {
65
+ ...cardReviewStateShape,
66
+ buriedAt: z.coerce.date().nullable(),
67
+ } satisfies z.ZodRawShape
68
+
69
+ export const cardReviewStateSchema = z.object(cardReviewStateShape)
70
+ export type CardReviewState = z.infer<typeof cardReviewStateSchema>
71
+
72
+ export const cardMemoryStateSchema = z.object(cardMemoryStateShape)
73
+ export type CardMemoryState = z.infer<typeof cardMemoryStateSchema>
@@ -0,0 +1,183 @@
1
+ import type { LangCodeISO6393 } from "../languages"
2
+
3
+ export const LANG_CODE_TO_EN_NAME = {
4
+ "eng": "English",
5
+ "cmn": "Simplified Mandarin Chinese",
6
+ "cmn-Hant": "Traditional Mandarin Chinese",
7
+ "yue": "Cantonese", // not supported by franc-min
8
+ "spa": "Spanish",
9
+ "rus": "Russian",
10
+ "arb": "Standard Arabic",
11
+ "ben": "Bengali",
12
+ "hin": "Hindi",
13
+ "por": "Portuguese",
14
+ "ind": "Indonesian",
15
+ "jpn": "Japanese",
16
+ "fra": "French",
17
+ "deu": "German",
18
+ "jav": "Javanese (Javanese)",
19
+ "kor": "Korean",
20
+ "tel": "Telugu",
21
+ "vie": "Vietnamese",
22
+ "mar": "Marathi",
23
+ "ita": "Italian",
24
+ "tam": "Tamil",
25
+ "tur": "Turkish",
26
+ "urd": "Urdu",
27
+ "guj": "Gujarati",
28
+ "pol": "Polish",
29
+ "ukr": "Ukrainian",
30
+ "kan": "Kannada",
31
+ "mai": "Maithili",
32
+ "mal": "Malayalam",
33
+ "pes": "Iranian Persian",
34
+ "mya": "Burmese",
35
+ "swh": "Swahili (individual language)",
36
+ "sun": "Sundanese",
37
+ "ron": "Romanian",
38
+ "pan": "Panjabi",
39
+ "bho": "Bhojpuri",
40
+ "amh": "Amharic",
41
+ "hau": "Hausa",
42
+ "fuv": "Nigerian Fulfulde",
43
+ "bos": "Bosnian (Cyrillic)",
44
+ "hrv": "Croatian",
45
+ "nld": "Dutch",
46
+ "srp": "Serbian (Cyrillic)",
47
+ "tha": "Thai",
48
+ "ckb": "Central Kurdish",
49
+ "yor": "Yoruba",
50
+ "uzn": "Northern Uzbek (Cyrillic)",
51
+ "zlm": "Malay (individual language) (Arabic)",
52
+ "ibo": "Igbo",
53
+ "npi": "Nepali (individual language)",
54
+ "ceb": "Cebuano",
55
+ "skr": "Saraiki",
56
+ "tgl": "Tagalog",
57
+ "hun": "Hungarian",
58
+ "azj": "North Azerbaijani (Cyrillic)",
59
+ "sin": "Sinhala",
60
+ "koi": "Komi-Permyak",
61
+ "ell": "Modern Greek (1453-)",
62
+ "ces": "Czech",
63
+ "mag": "Magahi",
64
+ "run": "Rundi",
65
+ "bel": "Belarusian",
66
+ "plt": "Plateau Malagasy",
67
+ "qug": "Chimborazo Highland Quichua",
68
+ "mad": "Madurese",
69
+ "nya": "Nyanja",
70
+ "zyb": "Yongbei Zhuang",
71
+ "pbu": "Northern Pashto",
72
+ "kin": "Kinyarwanda",
73
+ "zul": "Zulu",
74
+ "bul": "Bulgarian",
75
+ "swe": "Swedish",
76
+ "lin": "Lingala",
77
+ "som": "Somali",
78
+ "hms": "Southern Qiandong Miao",
79
+ "hnj": "Hmong Njua",
80
+ "ilo": "Iloko",
81
+ "kaz": "Kazakh",
82
+ "heb": "Hebrew",
83
+ "nob": "Norwegian Bokmål",
84
+ "nno": "Norwegian Nynorsk",
85
+ "afr": "Afrikaans",
86
+ "sqi": "Albanian",
87
+ "asm": "Assamese",
88
+ "eus": "Basque",
89
+ "bre": "Breton",
90
+ "cat": "Catalan",
91
+ "cos": "Corsican",
92
+ "cym": "Welsh",
93
+ "dan": "Danish",
94
+ "div": "Divehi",
95
+ "epo": "Esperanto",
96
+ "ekk": "Estonian",
97
+ "fao": "Faroese",
98
+ "fij": "Fijian",
99
+ "fin": "Finnish",
100
+ "fry": "Western Frisian",
101
+ "gla": "Scottish Gaelic",
102
+ "gle": "Irish",
103
+ "glg": "Galician",
104
+ "grn": "Guarani",
105
+ "hat": "Haitian Creole",
106
+ "haw": "Hawaiian",
107
+ "hye": "Armenian",
108
+ "ido": "Ido",
109
+ "ina": "Interlingua",
110
+ "isl": "Icelandic",
111
+ "kat": "Georgian",
112
+ "khm": "Khmer",
113
+ "kir": "Kyrgyz",
114
+ "lao": "Lao",
115
+ "lat": "Latin",
116
+ "lvs": "Latvian",
117
+ "lit": "Lithuanian",
118
+ "ltz": "Luxembourgish",
119
+ "mkd": "Macedonian",
120
+ "mlt": "Maltese",
121
+ "mon": "Mongolian",
122
+ "mri": "Maori",
123
+ "nso": "Northern Sotho",
124
+ "oci": "Occitan",
125
+ "ori": "Odia",
126
+ "orm": "Oromo",
127
+ "prs": "Dari",
128
+ "san": "Sanskrit",
129
+ "slk": "Slovak",
130
+ "slv": "Slovenian",
131
+ "smo": "Samoan",
132
+ "sna": "Shona",
133
+ "snd": "Sindhi",
134
+ "sot": "Southern Sotho",
135
+ "tah": "Tahitian",
136
+ "tat": "Tatar",
137
+ "tgk": "Tajik",
138
+ "tir": "Tigrinya",
139
+ "ton": "Tongan",
140
+ "tsn": "Tswana",
141
+ "tuk": "Turkmen",
142
+ "uig": "Uyghur",
143
+ "vol": "Volapük",
144
+ "wol": "Wolof",
145
+ "xho": "Xhosa",
146
+ "ydd": "Eastern Yiddish",
147
+ "aka": "Akan",
148
+ "bam": "Bambara",
149
+ "bis": "Bislama",
150
+ "bod": "Tibetan",
151
+ "che": "Chechen",
152
+ "chv": "Chuvash",
153
+ "dzo": "Dzongkha",
154
+ "ewe": "Ewe",
155
+ "kab": "Kabyle",
156
+ "lug": "Ganda",
157
+ "oss": "Ossetian",
158
+ "ssw": "Swati",
159
+ "ven": "Venda",
160
+ "war": "Waray",
161
+ "nde": "North Ndebele",
162
+ "nbl": "South Ndebele",
163
+ "pam": "Pampanga",
164
+ "hil": "Hiligaynon",
165
+ "bcl": "Central Bikol",
166
+ "min": "Minangkabau",
167
+ "ace": "Acehnese",
168
+ "bug": "Buginese",
169
+ "ban": "Balinese",
170
+ "bjn": "Banjar",
171
+ "mak": "Makasar",
172
+ "sas": "Sasak",
173
+ "tet": "Tetum",
174
+ "cha": "Chamorro",
175
+ "niu": "Niuean",
176
+ "tvl": "Tuvaluan",
177
+ "gil": "Gilbertese",
178
+ "mah": "Marshallese",
179
+ "pau": "Palauan",
180
+ "wls": "Wallisian",
181
+ "rar": "Rarotongan",
182
+ "hif": "Fiji Hindi",
183
+ } satisfies Record<LangCodeISO6393, string>
@@ -0,0 +1,183 @@
1
+ import type { LangCodeISO6393 } from "../languages"
2
+
3
+ export const LANG_CODE_TO_LOCALE_NAME = {
4
+ "eng": "English",
5
+ "cmn": "简体中文",
6
+ "cmn-Hant": "繁體中文",
7
+ "yue": "粵語",
8
+ "spa": "Español",
9
+ "rus": "Русский",
10
+ "arb": "العربية",
11
+ "ben": "বাংলা",
12
+ "hin": "हिन्दी",
13
+ "por": "Português",
14
+ "ind": "Bahasa Indonesia",
15
+ "jpn": "日本語",
16
+ "fra": "Français",
17
+ "deu": "Deutsch",
18
+ "jav": "Basa Jawa",
19
+ "kor": "한국어",
20
+ "tel": "తెలుగు",
21
+ "vie": "Tiếng Việt",
22
+ "mar": "मराठी",
23
+ "ita": "Italiano",
24
+ "tam": "தமிழ்",
25
+ "tur": "Türkçe",
26
+ "urd": "اردو",
27
+ "guj": "ગુજરાતી",
28
+ "pol": "Polski",
29
+ "ukr": "Українська",
30
+ "kan": "ಕನ್ನಡ",
31
+ "mai": "मैथिली",
32
+ "mal": "മലയാളം",
33
+ "pes": "فارسی",
34
+ "mya": "မြန်မာစာ",
35
+ "swh": "Kiswahili",
36
+ "sun": "Basa Sunda",
37
+ "ron": "Română",
38
+ "pan": "ਪੰਜਾਬੀ",
39
+ "bho": "भोजपुरी",
40
+ "amh": "አማርኛ",
41
+ "hau": "Hausa",
42
+ "fuv": "Fulfulde",
43
+ "bos": "Босански",
44
+ "hrv": "Hrvatski",
45
+ "nld": "Nederlands",
46
+ "srp": "Српски",
47
+ "tha": "ไทย",
48
+ "ckb": "کوردیی ناوەندی",
49
+ "yor": "Yorùbá",
50
+ "uzn": "Ўзбекча",
51
+ "zlm": "بهاس ملايو",
52
+ "ibo": "Asụsụ Igbo",
53
+ "npi": "नेपाली",
54
+ "ceb": "Cebuano",
55
+ "skr": "سرائیکی",
56
+ "tgl": "Tagalog",
57
+ "hun": "Magyar",
58
+ "azj": "Азәрбајҹан дили",
59
+ "sin": "සිංහල",
60
+ "koi": "Перем Коми кыв",
61
+ "ell": "Ελληνικά",
62
+ "ces": "Čeština",
63
+ "mag": "मगही",
64
+ "run": "Ikirundi",
65
+ "bel": "Беларуская",
66
+ "plt": "Fiteny Malagasy",
67
+ "qug": "Kichwa",
68
+ "mad": "Madhurâ",
69
+ "nya": "Chinyanja",
70
+ "zyb": "Yongbei Bouxcuengh",
71
+ "pbu": "پښتو",
72
+ "kin": "Kinyarwanda",
73
+ "zul": "isiZulu",
74
+ "bul": "Български",
75
+ "swe": "Svenska",
76
+ "lin": "Lingála",
77
+ "som": "Af Soomaali",
78
+ "hms": "Hmongb Shuad",
79
+ "hnj": "Hmong Njua",
80
+ "ilo": "Ilokano",
81
+ "kaz": "Қазақ тілі",
82
+ "heb": "עברית",
83
+ "nob": "Norsk bokmål",
84
+ "nno": "Norsk nynorsk",
85
+ "afr": "Afrikaans",
86
+ "sqi": "Shqip",
87
+ "asm": "অসমীয়া",
88
+ "eus": "Euskara",
89
+ "bre": "Brezhoneg",
90
+ "cat": "Català",
91
+ "cos": "Corsu",
92
+ "cym": "Cymraeg",
93
+ "dan": "Dansk",
94
+ "div": "ދިވެހި",
95
+ "epo": "Esperanto",
96
+ "ekk": "Eesti",
97
+ "fao": "Føroyskt",
98
+ "fij": "Vosa Vakaviti",
99
+ "fin": "Suomi",
100
+ "fry": "Frysk",
101
+ "gla": "Gàidhlig",
102
+ "gle": "Gaeilge",
103
+ "glg": "Galego",
104
+ "grn": "Avañeʼẽ",
105
+ "hat": "Kreyòl ayisyen",
106
+ "haw": "ʻŌlelo Hawaiʻi",
107
+ "hye": "Հایերен",
108
+ "ido": "Ido",
109
+ "ina": "Interlingua",
110
+ "isl": "Íslenska",
111
+ "kat": "ქართული",
112
+ "khm": "ភាសាខ្មែរ",
113
+ "kir": "Кыргызча",
114
+ "lao": "ພາສາລາວ",
115
+ "lat": "Latina",
116
+ "lvs": "Latviešu",
117
+ "lit": "Lietuvių",
118
+ "ltz": "Lëtzebuergesch",
119
+ "mkd": "Македонски",
120
+ "mlt": "Malti",
121
+ "mon": "Монгол",
122
+ "mri": "Te Reo Māori",
123
+ "nso": "Sesotho sa Leboa",
124
+ "oci": "Occitan",
125
+ "ori": "ଓଡ଼ିଆ",
126
+ "orm": "Oromoo",
127
+ "prs": "دری",
128
+ "san": "संस्कृतम्",
129
+ "slk": "Slovenčina",
130
+ "slv": "Slovenščina",
131
+ "smo": "Gagana Samoa",
132
+ "sna": "chiShona",
133
+ "snd": "سنڌي",
134
+ "sot": "Sesotho",
135
+ "tah": "Reo Tahiti",
136
+ "tat": "Татарча",
137
+ "tgk": "Тоҷикӣ",
138
+ "tir": "ትግርኛ",
139
+ "ton": "Lea fakatonga",
140
+ "tsn": "Setswana",
141
+ "tuk": "Türkmençe",
142
+ "uig": "ئۇيغۇرچە",
143
+ "vol": "Volapük",
144
+ "wol": "Wolof",
145
+ "xho": "isiXhosa",
146
+ "ydd": "ייִדיש",
147
+ "aka": "Akan",
148
+ "bam": "Bamanankan",
149
+ "bis": "Bislama",
150
+ "bod": "བོད་སྐད",
151
+ "che": "Нохчийн",
152
+ "chv": "Чӑвашла",
153
+ "dzo": "རྫོང་ཁ",
154
+ "ewe": "Eʋegbe",
155
+ "kab": "Taqbaylit",
156
+ "lug": "Luganda",
157
+ "oss": "Ирон",
158
+ "ssw": "SiSwati",
159
+ "ven": "Tshivenḓa",
160
+ "war": "Winaray",
161
+ "nde": "isiNdebele",
162
+ "nbl": "isiNdebele seSewula",
163
+ "pam": "Kapampangan",
164
+ "hil": "Ilonggo",
165
+ "bcl": "Bikol Sentral",
166
+ "min": "Baso Minangkabau",
167
+ "ace": "Bahsa Acèh",
168
+ "bug": "Basa Ugi",
169
+ "ban": "Basa Bali",
170
+ "bjn": "Bahasa Banjar",
171
+ "mak": "Basa Mangkasara",
172
+ "sas": "Sasak",
173
+ "tet": "Tetun",
174
+ "cha": "Chamoru",
175
+ "niu": "Vagahau Niuē",
176
+ "tvl": "Te Gana Tuvalu",
177
+ "gil": "Taetae ni Kiribati",
178
+ "mah": "Kajin Majel",
179
+ "pau": "A tekoi er a Belau",
180
+ "wls": "Fakaʻuvea",
181
+ "rar": "Māori Kūki ʻĀirani",
182
+ "hif": "फ़िजी हिंदी",
183
+ } satisfies Record<LangCodeISO6393, string>