@atproto/ozone 0.1.9 → 0.1.11

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 (82) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/api/moderation/emitEvent.d.ts.map +1 -1
  3. package/dist/api/moderation/emitEvent.js +4 -0
  4. package/dist/api/moderation/emitEvent.js.map +1 -1
  5. package/dist/api/moderation/queryStatuses.d.ts.map +1 -1
  6. package/dist/api/moderation/queryStatuses.js +2 -1
  7. package/dist/api/moderation/queryStatuses.js.map +1 -1
  8. package/dist/api/util.d.ts +1 -1
  9. package/dist/api/util.d.ts.map +1 -1
  10. package/dist/api/util.js +2 -0
  11. package/dist/api/util.js.map +1 -1
  12. package/dist/db/migrations/20240408T192432676Z-mute-reporting.d.ts +4 -0
  13. package/dist/db/migrations/20240408T192432676Z-mute-reporting.d.ts.map +1 -0
  14. package/dist/db/migrations/20240408T192432676Z-mute-reporting.js +18 -0
  15. package/dist/db/migrations/20240408T192432676Z-mute-reporting.js.map +1 -0
  16. package/dist/db/migrations/index.d.ts +1 -0
  17. package/dist/db/migrations/index.d.ts.map +1 -1
  18. package/dist/db/migrations/index.js +2 -1
  19. package/dist/db/migrations/index.js.map +1 -1
  20. package/dist/db/schema/moderation_event.d.ts +1 -1
  21. package/dist/db/schema/moderation_event.d.ts.map +1 -1
  22. package/dist/db/schema/moderation_subject_status.d.ts +1 -0
  23. package/dist/db/schema/moderation_subject_status.d.ts.map +1 -1
  24. package/dist/lexicon/lexicons.d.ts +68 -0
  25. package/dist/lexicon/lexicons.d.ts.map +1 -1
  26. package/dist/lexicon/lexicons.js +78 -0
  27. package/dist/lexicon/lexicons.js.map +1 -1
  28. package/dist/lexicon/types/app/bsky/actor/defs.d.ts +16 -1
  29. package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
  30. package/dist/lexicon/types/app/bsky/actor/defs.js +21 -1
  31. package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
  32. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts +22 -2
  33. package/dist/lexicon/types/tools/ozone/moderation/defs.d.ts.map +1 -1
  34. package/dist/lexicon/types/tools/ozone/moderation/defs.js +22 -2
  35. package/dist/lexicon/types/tools/ozone/moderation/defs.js.map +1 -1
  36. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts +1 -1
  37. package/dist/lexicon/types/tools/ozone/moderation/emitEvent.d.ts.map +1 -1
  38. package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts +2 -0
  39. package/dist/lexicon/types/tools/ozone/moderation/queryStatuses.d.ts.map +1 -1
  40. package/dist/mod-service/index.d.ts +6 -2
  41. package/dist/mod-service/index.d.ts.map +1 -1
  42. package/dist/mod-service/index.js +25 -1
  43. package/dist/mod-service/index.js.map +1 -1
  44. package/dist/mod-service/lang-data.d.ts +12 -0
  45. package/dist/mod-service/lang-data.d.ts.map +1 -0
  46. package/dist/mod-service/lang-data.js +555 -0
  47. package/dist/mod-service/lang-data.js.map +1 -0
  48. package/dist/mod-service/lang.d.ts +1 -0
  49. package/dist/mod-service/lang.d.ts.map +1 -1
  50. package/dist/mod-service/lang.js +50 -0
  51. package/dist/mod-service/lang.js.map +1 -1
  52. package/dist/mod-service/status.d.ts +21 -1
  53. package/dist/mod-service/status.d.ts.map +1 -1
  54. package/dist/mod-service/status.js +23 -0
  55. package/dist/mod-service/status.js.map +1 -1
  56. package/dist/mod-service/views.d.ts.map +1 -1
  57. package/dist/mod-service/views.js +3 -0
  58. package/dist/mod-service/views.js.map +1 -1
  59. package/jest.config.js +1 -1
  60. package/package.json +4 -3
  61. package/src/api/moderation/emitEvent.ts +9 -0
  62. package/src/api/moderation/queryStatuses.ts +2 -0
  63. package/src/api/util.ts +2 -0
  64. package/src/db/migrations/20240408T192432676Z-mute-reporting.ts +15 -0
  65. package/src/db/migrations/index.ts +1 -0
  66. package/src/db/schema/moderation_event.ts +3 -0
  67. package/src/db/schema/moderation_subject_status.ts +1 -0
  68. package/src/lexicon/lexicons.ts +80 -0
  69. package/src/lexicon/types/app/bsky/actor/defs.ts +38 -0
  70. package/src/lexicon/types/tools/ozone/moderation/defs.ts +56 -0
  71. package/src/lexicon/types/tools/ozone/moderation/emitEvent.ts +3 -0
  72. package/src/lexicon/types/tools/ozone/moderation/queryStatuses.ts +2 -0
  73. package/src/mod-service/index.ts +33 -0
  74. package/src/mod-service/lang-data.ts +561 -0
  75. package/src/mod-service/lang.ts +34 -0
  76. package/src/mod-service/status.ts +26 -0
  77. package/src/mod-service/views.ts +3 -0
  78. package/tests/__snapshots__/get-record.test.ts.snap +2 -2
  79. package/tests/__snapshots__/moderation-events.test.ts.snap +6 -1
  80. package/tests/__snapshots__/moderation-statuses.test.ts.snap +1 -1
  81. package/tests/lang.test.ts +109 -0
  82. package/tests/report-muting.test.ts +100 -0
@@ -0,0 +1,561 @@
1
+ // Also used in the client app https://github.com/bluesky-social/social-app/blob/main/src/locale/languages.ts
2
+ interface Language {
3
+ code3: string
4
+ code2: string
5
+ name: string
6
+ }
7
+
8
+ export const LANGUAGES: Language[] = [
9
+ { code3: 'aar', code2: 'aa', name: 'Afar' },
10
+ { code3: 'abk', code2: 'ab', name: 'Abkhazian' },
11
+ { code3: 'ace', code2: '', name: 'Achinese' },
12
+ { code3: 'ach', code2: '', name: 'Acoli' },
13
+ { code3: 'ada', code2: '', name: 'Adangme' },
14
+ { code3: 'ady', code2: '', name: 'Adyghe; Adygei' },
15
+ { code3: 'afa', code2: '', name: 'Afro-Asiatic languages' },
16
+ { code3: 'afh', code2: '', name: 'Afrihili' },
17
+ { code3: 'afr', code2: 'af', name: 'Afrikaans' },
18
+ { code3: 'ain', code2: '', name: 'Ainu' },
19
+ { code3: 'aka', code2: 'ak', name: 'Akan' },
20
+ { code3: 'akk', code2: '', name: 'Akkadian' },
21
+ { code3: 'alb', code2: 'sq', name: 'Albanian' },
22
+ { code3: 'ale', code2: '', name: 'Aleut' },
23
+ { code3: 'alg', code2: '', name: 'Algonquian languages' },
24
+ { code3: 'alt', code2: '', name: 'Southern Altai' },
25
+ { code3: 'amh', code2: 'am', name: 'Amharic' },
26
+ { code3: 'ang', code2: '', name: 'English, Old (ca.450-1100)' },
27
+ { code3: 'anp ', code2: 'Angika', name: 'Angika' },
28
+ { code3: 'apa', code2: '', name: 'Apache languages' },
29
+ { code3: 'ara', code2: 'ar', name: 'Arabic' },
30
+ {
31
+ code3: 'arc',
32
+ code2: '',
33
+ name: 'Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)',
34
+ },
35
+ { code3: 'arg', code2: 'an', name: 'Aragonese' },
36
+ { code3: 'arm', code2: 'hy', name: 'Armenian' },
37
+ { code3: 'arn', code2: '', name: 'Mapudungun; Mapuche' },
38
+ { code3: 'arp', code2: '', name: 'Arapaho' },
39
+ { code3: 'art', code2: '', name: 'Artificial languages' },
40
+ { code3: 'arw', code2: '', name: 'Arawak' },
41
+ { code3: 'asm', code2: 'as', name: 'Assamese' },
42
+ { code3: 'ast', code2: '', name: 'Asturian; Bable; Leonese; Asturleonese' },
43
+ { code3: 'ath', code2: '', name: 'Athapascan languages' },
44
+ { code3: 'aus', code2: '', name: 'Australian languages' },
45
+ { code3: 'ava', code2: 'av', name: 'Avaric' },
46
+ { code3: 'ave', code2: 'ae', name: 'Avestan' },
47
+ { code3: 'awa', code2: '', name: 'Awadhi' },
48
+ { code3: 'aym', code2: 'ay', name: 'Aymara' },
49
+ { code3: 'aze', code2: 'az', name: 'Azerbaijani' },
50
+ { code3: 'bad', code2: '', name: 'Banda languages' },
51
+ { code3: 'bai', code2: '', name: 'Bamileke languages' },
52
+ { code3: 'bak', code2: 'ba', name: 'Bashkir' },
53
+ { code3: 'bal', code2: '', name: 'Baluchi' },
54
+ { code3: 'bam', code2: 'bm', name: 'Bambara' },
55
+ { code3: 'ban', code2: '', name: 'Balinese' },
56
+ { code3: 'baq', code2: 'eu', name: 'Basque' },
57
+ { code3: 'bas', code2: '', name: 'Basa' },
58
+ { code3: 'bat', code2: '', name: 'Baltic languages' },
59
+ { code3: 'bej', code2: '', name: 'Beja; Bedawiyet' },
60
+ { code3: 'bel', code2: 'be', name: 'Belarusian' },
61
+ { code3: 'bem', code2: '', name: 'Bemba' },
62
+ { code3: 'ben', code2: 'bn', name: 'Bengali' },
63
+ { code3: 'ber', code2: '', name: 'Berber languages' },
64
+ { code3: 'bho', code2: '', name: 'Bhojpuri' },
65
+ { code3: 'bih', code2: 'bh', name: 'Bihari languages' },
66
+ { code3: 'bik', code2: '', name: 'Bikol' },
67
+ { code3: 'bin', code2: '', name: 'Bini; Edo' },
68
+ { code3: 'bis', code2: 'bi', name: 'Bislama' },
69
+ { code3: 'bla', code2: '', name: 'Siksika' },
70
+ { code3: 'bnt', code2: '', name: 'Bantu languages' },
71
+ { code3: 'bod', code2: 'bo', name: 'Tibetan' },
72
+ { code3: 'bos', code2: 'bs', name: 'Bosnian' },
73
+ { code3: 'bra', code2: '', name: 'Braj' },
74
+ { code3: 'bre', code2: 'br', name: 'Breton' },
75
+ { code3: 'btk', code2: '', name: 'Batak languages' },
76
+ { code3: 'bua', code2: '', name: 'Buriat' },
77
+ { code3: 'bug', code2: '', name: 'Buginese' },
78
+ { code3: 'bul', code2: 'bg', name: 'Bulgarian' },
79
+ { code3: 'bur', code2: 'my', name: 'Burmese' },
80
+ { code3: 'byn', code2: '', name: 'Blin; Bilin' },
81
+ { code3: 'cad', code2: '', name: 'Caddo' },
82
+ { code3: 'cai', code2: '', name: 'Central American Indian languages' },
83
+ { code3: 'car', code2: '', name: 'Galibi Carib' },
84
+ { code3: 'cat', code2: 'ca', name: 'Catalan; Valencian' },
85
+ { code3: 'cau', code2: '', name: 'Caucasian languages' },
86
+ { code3: 'ceb', code2: '', name: 'Cebuano' },
87
+ { code3: 'cel', code2: '', name: 'Celtic languages' },
88
+ { code3: 'ces', code2: 'cs', name: 'Czech' },
89
+ { code3: 'cha', code2: 'ch', name: 'Chamorro' },
90
+ { code3: 'chb', code2: '', name: 'Chibcha' },
91
+ { code3: 'che', code2: 'ce', name: 'Chechen' },
92
+ { code3: 'chg', code2: '', name: 'Chagatai' },
93
+ { code3: 'chi', code2: 'zh', name: 'Chinese' },
94
+ { code3: 'chk', code2: '', name: 'Chuukese' },
95
+ { code3: 'chm', code2: '', name: 'Mari' },
96
+ { code3: 'chn', code2: '', name: 'Chinook jargon' },
97
+ { code3: 'cho', code2: '', name: 'Choctaw' },
98
+ { code3: 'chp', code2: '', name: 'Chipewyan; Dene Suline' },
99
+ { code3: 'chr', code2: '', name: 'Cherokee' },
100
+ {
101
+ code3: 'chu',
102
+ code2: 'cu',
103
+ name: 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic',
104
+ },
105
+ { code3: 'chv', code2: 'cv', name: 'Chuvash' },
106
+ { code3: 'chy', code2: '', name: 'Cheyenne' },
107
+ { code3: 'cmc', code2: '', name: 'Chamic languages' },
108
+ { code3: 'cnr', code2: '', name: 'Montenegrin' },
109
+ { code3: 'cop', code2: '', name: 'Coptic' },
110
+ { code3: 'cor', code2: 'kw', name: 'Cornish' },
111
+ { code3: 'cos', code2: 'co', name: 'Corsican' },
112
+ { code3: 'cpe', code2: '', name: 'Creoles and pidgins, English based' },
113
+ { code3: 'cpf', code2: '', name: 'Creoles and pidgins, French-based' },
114
+ { code3: 'cpp', code2: '', name: 'Creoles and pidgins, Portuguese-based' },
115
+ { code3: 'cre', code2: 'cr', name: 'Cree' },
116
+ { code3: 'crh', code2: '', name: 'Crimean Tatar; Crimean Turkish' },
117
+ { code3: 'crp', code2: '', name: 'Creoles and pidgins' },
118
+ { code3: 'csb', code2: '', name: 'Kashubian' },
119
+ { code3: 'cus', code2: '', name: 'Cushitic languages' },
120
+ { code3: 'cym', code2: 'cy', name: 'Welsh' },
121
+ { code3: 'cze', code2: 'cs', name: 'Czech' },
122
+ { code3: 'dak', code2: '', name: 'Dakota' },
123
+ { code3: 'dan', code2: 'da', name: 'Danish' },
124
+ { code3: 'dar', code2: '', name: 'Dargwa' },
125
+ { code3: 'day', code2: '', name: 'Land Dayak languages' },
126
+ { code3: 'del', code2: '', name: 'Delaware' },
127
+ { code3: 'den', code2: '', name: 'Slave (Athapascan)' },
128
+ { code3: 'deu', code2: 'de', name: 'German' },
129
+ { code3: 'dgr', code2: '', name: 'Dogrib' },
130
+ { code3: 'din', code2: '', name: 'Dinka' },
131
+ { code3: 'div', code2: 'dv', name: 'Divehi; Dhivehi; Maldivian' },
132
+ { code3: 'doi', code2: '', name: 'Dogri' },
133
+ { code3: 'dra', code2: '', name: 'Dravidian languages' },
134
+ { code3: 'dsb', code2: '', name: 'Lower Sorbian' },
135
+ { code3: 'dua', code2: '', name: 'Duala' },
136
+ { code3: 'dum', code2: '', name: 'Dutch, Middle (ca.1050-1350)' },
137
+ { code3: 'dut', code2: 'nl', name: 'Dutch; Flemish' },
138
+ { code3: 'dyu', code2: '', name: 'Dyula' },
139
+ { code3: 'dzo', code2: 'dz', name: 'Dzongkha' },
140
+ { code3: 'efi', code2: '', name: 'Efik' },
141
+ { code3: 'egy', code2: '', name: 'Egyptian (Ancient)' },
142
+ { code3: 'eka', code2: '', name: 'Ekajuk' },
143
+ { code3: 'ell', code2: 'el', name: 'Greek, Modern (1453-)' },
144
+ { code3: 'elx', code2: '', name: 'Elamite' },
145
+ { code3: 'eng', code2: 'en', name: 'English' },
146
+ { code3: 'enm', code2: '', name: 'English, Middle (1100-1500)' },
147
+ { code3: 'epo', code2: 'eo', name: 'Esperanto' },
148
+ { code3: 'est', code2: 'et', name: 'Estonian' },
149
+ { code3: 'eus', code2: 'eu', name: 'Basque' },
150
+ { code3: 'ewe', code2: 'ee', name: 'Ewe' },
151
+ { code3: 'ewo', code2: '', name: 'Ewondo' },
152
+ { code3: 'fan', code2: '', name: 'Fang' },
153
+ { code3: 'fao', code2: 'fo', name: 'Faroese' },
154
+ { code3: 'fas', code2: 'fa', name: 'Persian' },
155
+ { code3: 'fat', code2: '', name: 'Fanti' },
156
+ { code3: 'fij', code2: 'fj', name: 'Fijian' },
157
+ { code3: 'fil', code2: '', name: 'Filipino; Pilipino' },
158
+ { code3: 'fin', code2: 'fi', name: 'Finnish' },
159
+ { code3: 'fiu', code2: '', name: 'Finno-Ugrian languages' },
160
+ { code3: 'fon', code2: '', name: 'Fon' },
161
+ { code3: 'fra', code2: 'fr', name: 'French' },
162
+ { code3: 'fre', code2: 'fr', name: 'French' },
163
+ { code3: 'frm', code2: '', name: 'French, Middle (ca.1400-1600)' },
164
+ { code3: 'fro', code2: '', name: 'French, Old (842-ca.1400)' },
165
+ { code3: 'frr', code2: '', name: 'Northern Frisian' },
166
+ { code3: 'frs', code2: '', name: 'Eastern Frisian' },
167
+ { code3: 'fry', code2: 'fy', name: 'Western Frisian' },
168
+ { code3: 'ful', code2: 'ff', name: 'Fulah' },
169
+ { code3: 'fur', code2: '', name: 'Friulian' },
170
+ { code3: 'gaa', code2: '', name: 'Ga' },
171
+ { code3: 'gay', code2: '', name: 'Gayo' },
172
+ { code3: 'gba', code2: '', name: 'Gbaya' },
173
+ { code3: 'gem', code2: '', name: 'Germanic languages' },
174
+ { code3: 'geo', code2: 'ka', name: 'Georgian' },
175
+ { code3: 'ger', code2: 'de', name: 'German' },
176
+ { code3: 'gez', code2: '', name: 'Geez' },
177
+ { code3: 'gil', code2: '', name: 'Gilbertese' },
178
+ { code3: 'gla', code2: 'gd', name: 'Gaelic; Scottish Gaelic' },
179
+ { code3: 'gle', code2: 'ga', name: 'Irish' },
180
+ { code3: 'glg', code2: 'gl', name: 'Galician' },
181
+ { code3: 'glv', code2: 'gv', name: 'Manx' },
182
+ { code3: 'gmh', code2: '', name: 'German, Middle High (ca.1050-1500)' },
183
+ { code3: 'goh', code2: '', name: 'German, Old High (ca.750-1050)' },
184
+ { code3: 'gon', code2: '', name: 'Gondi' },
185
+ { code3: 'gor', code2: '', name: 'Gorontalo' },
186
+ { code3: 'got', code2: '', name: 'Gothic' },
187
+ { code3: 'grb', code2: '', name: 'Grebo' },
188
+ { code3: 'grc', code2: '', name: 'Greek, Ancient (to 1453)' },
189
+ { code3: 'gre', code2: 'el', name: 'Greek, Modern (1453-)' },
190
+ { code3: 'grn', code2: 'gn', name: 'Guarani' },
191
+ { code3: 'gsw', code2: '', name: 'Swiss German; Alemannic; Alsatian' },
192
+ { code3: 'gujgu', code2: 'Gujarati', name: 'goudjrati' },
193
+ { code3: 'gwi', code2: '', name: "Gwich'in" },
194
+ { code3: 'hai', code2: '', name: 'Haida' },
195
+ { code3: 'hat', code2: 'ht', name: 'Haitian; Haitian Creole' },
196
+ { code3: 'hau', code2: 'ha', name: 'Hausa' },
197
+ { code3: 'haw', code2: '', name: 'Hawaiian' },
198
+ { code3: 'heb', code2: 'he', name: 'Hebrew' },
199
+ { code3: 'her', code2: 'hz', name: 'Herero' },
200
+ { code3: 'hil', code2: '', name: 'Hiligaynon' },
201
+ {
202
+ code3: 'him',
203
+ code2: '',
204
+ name: 'Himachali languages; Western Pahari languages',
205
+ },
206
+ { code3: 'hin', code2: 'hi', name: 'Hindi' },
207
+ { code3: 'hit', code2: '', name: 'Hittite' },
208
+ { code3: 'hmn', code2: '', name: 'Hmong; Mong' },
209
+ { code3: 'hmo', code2: 'ho', name: 'Hiri Motu' },
210
+ { code3: 'hrv', code2: 'hr', name: 'Croatian' },
211
+ { code3: 'hsb', code2: '', name: 'Upper Sorbian' },
212
+ { code3: 'hun', code2: 'hu', name: 'Hungarian' },
213
+ { code3: 'hup', code2: '', name: 'Hupa' },
214
+ { code3: 'hye', code2: 'hy', name: 'Armenian' },
215
+ { code3: 'iba', code2: '', name: 'Iban' },
216
+ { code3: 'ibo', code2: 'ig', name: 'Igbo' },
217
+ { code3: 'ice', code2: 'is', name: 'Icelandic' },
218
+ { code3: 'ido', code2: 'io', name: 'Ido' },
219
+ { code3: 'iii', code2: 'ii', name: 'Sichuan Yi; Nuosu' },
220
+ { code3: 'ijo', code2: '', name: 'Ijo languages' },
221
+ { code3: 'iku', code2: 'iu', name: 'Inuktitut' },
222
+ { code3: 'ile', code2: 'ie', name: 'Interlingue; Occidental' },
223
+ { code3: 'ilo', code2: '', name: 'Iloko' },
224
+ {
225
+ code3: 'ina',
226
+ code2: 'ia',
227
+ name: 'Interlingua (International Auxiliary Language Association)',
228
+ },
229
+ { code3: 'inc', code2: '', name: 'Indic languages' },
230
+ { code3: 'ind', code2: 'id', name: 'Indonesian' },
231
+ { code3: 'ine', code2: '', name: 'Indo-European languages' },
232
+ { code3: 'inh', code2: '', name: 'Ingush' },
233
+ { code3: 'ipk', code2: 'ik', name: 'Inupiaq' },
234
+ { code3: 'ira', code2: '', name: 'Iranian languages' },
235
+ { code3: 'iro', code2: '', name: 'Iroquoian languages' },
236
+ { code3: 'isl', code2: 'is', name: 'Icelandic' },
237
+ { code3: 'ita', code2: 'it', name: 'Italian' },
238
+ { code3: 'jav', code2: 'jv', name: 'Javanese' },
239
+ { code3: 'jbo', code2: '', name: 'Lojban' },
240
+ { code3: 'jpn', code2: 'ja', name: 'Japanese' },
241
+ { code3: 'jpr', code2: '', name: 'Judeo-Persian' },
242
+ { code3: 'jrb', code2: '', name: 'Judeo-Arabic' },
243
+ { code3: 'kaa', code2: '', name: 'Kara-Kalpak' },
244
+ { code3: 'kab', code2: '', name: 'Kabyle' },
245
+ { code3: 'kac', code2: '', name: 'Kachin; Jingpho' },
246
+ { code3: 'kal', code2: 'kl', name: 'Kalaallisut; Greenlandic' },
247
+ { code3: 'kam', code2: '', name: 'Kamba' },
248
+ { code3: 'kan', code2: 'kn', name: 'Kannada' },
249
+ { code3: 'kar', code2: '', name: 'Karen languages' },
250
+ { code3: 'kas', code2: 'ks', name: 'Kashmiri' },
251
+ { code3: 'kat', code2: 'ka', name: 'Georgian' },
252
+ { code3: 'kau', code2: 'kr', name: 'Kanuri' },
253
+ { code3: 'kaw', code2: '', name: 'Kawi' },
254
+ { code3: 'kaz', code2: 'kk', name: 'Kazakh' },
255
+ { code3: 'kbd', code2: '', name: 'Kabardian' },
256
+ { code3: 'kha', code2: '', name: 'Khasi' },
257
+ { code3: 'khi', code2: '', name: 'Khoisan languages' },
258
+ { code3: 'khm', code2: 'km', name: 'Central Khmer' },
259
+ { code3: 'kho', code2: '', name: 'Khotanese; Sakan' },
260
+ { code3: 'kik', code2: 'ki', name: 'Kikuyu; Gikuyu' },
261
+ { code3: 'kin', code2: 'rw', name: 'Kinyarwanda' },
262
+ { code3: 'kir', code2: 'ky', name: 'Kirghiz; Kyrgyz' },
263
+ { code3: 'kmb', code2: '', name: 'Kimbundu' },
264
+ { code3: 'kok', code2: '', name: 'Konkani' },
265
+ { code3: 'kom', code2: 'kv', name: 'Komi' },
266
+ { code3: 'kon', code2: 'kg', name: 'Kongo' },
267
+ { code3: 'kor', code2: 'ko', name: 'Korean' },
268
+ { code3: 'kos', code2: '', name: 'Kosraean' },
269
+ { code3: 'kpe', code2: '', name: 'Kpelle' },
270
+ { code3: 'krc', code2: '', name: 'Karachay-Balkar' },
271
+ { code3: 'krl', code2: '', name: 'Karelian' },
272
+ { code3: 'kro', code2: '', name: 'Kru languages' },
273
+ { code3: 'kru', code2: '', name: 'Kurukh' },
274
+ { code3: 'kua', code2: 'kj', name: 'Kuanyama; Kwanyama' },
275
+ { code3: 'kum', code2: '', name: 'Kumyk' },
276
+ { code3: 'kur', code2: 'ku', name: 'Kurdish' },
277
+ { code3: 'kut', code2: '', name: 'Kutenai' },
278
+ { code3: 'lad', code2: '', name: 'Ladino' },
279
+ { code3: 'lah', code2: '', name: 'Lahnda' },
280
+ { code3: 'lam', code2: '', name: 'Lamba' },
281
+ { code3: 'lao', code2: 'lo', name: 'Lao' },
282
+ { code3: 'lat', code2: 'la', name: 'Latin' },
283
+ { code3: 'lav', code2: 'lv', name: 'Latvian' },
284
+ { code3: 'lez', code2: '', name: 'Lezghian' },
285
+ { code3: 'lim', code2: 'li', name: 'Limburgan; Limburger; Limburgish' },
286
+ { code3: 'lin', code2: 'ln', name: 'Lingala' },
287
+ { code3: 'lit', code2: 'lt', name: 'Lithuanian' },
288
+ { code3: 'lol', code2: '', name: 'Mongo' },
289
+ { code3: 'loz', code2: '', name: 'Lozi' },
290
+ { code3: 'ltz', code2: 'lb', name: 'Luxembourgish; Letzeburgesch' },
291
+ { code3: 'lua', code2: '', name: 'Luba-Lulua' },
292
+ { code3: 'lub', code2: 'lu', name: 'Luba-Katanga' },
293
+ { code3: 'lug', code2: 'lg', name: 'Ganda' },
294
+ { code3: 'lui', code2: '', name: 'Luiseno' },
295
+ { code3: 'lun', code2: '', name: 'Lunda' },
296
+ {
297
+ code3: 'luo',
298
+ code2: ' Luo (Kenya and Tanzania)',
299
+ name: 'luo (Kenya et Tanzanie)',
300
+ },
301
+ { code3: 'lus', code2: '', name: 'Lushai' },
302
+ { code3: 'mac', code2: 'mk', name: 'Macedonian' },
303
+ { code3: 'mad', code2: '', name: 'Madurese' },
304
+ { code3: 'mag', code2: '', name: 'Magahi' },
305
+ { code3: 'mah', code2: 'mh', name: 'Marshallese' },
306
+ { code3: 'mai', code2: '', name: 'Maithili' },
307
+ { code3: 'mak', code2: '', name: 'Makasar' },
308
+ { code3: 'mal', code2: 'ml', name: 'Malayalam' },
309
+ { code3: 'man', code2: '', name: 'Mandingo' },
310
+ { code3: 'mao', code2: 'mi', name: 'Maori' },
311
+ { code3: 'map', code2: '', name: 'Austronesian languages' },
312
+ { code3: 'mar', code2: 'mr', name: 'Marathi' },
313
+ { code3: 'mas', code2: '', name: 'Masai' },
314
+ { code3: 'may', code2: 'ms', name: 'Malay' },
315
+ { code3: 'mdf', code2: '', name: 'Moksha' },
316
+ { code3: 'mdr', code2: '', name: 'Mandar' },
317
+ { code3: 'men', code2: '', name: 'Mende' },
318
+ { code3: 'mga', code2: '', name: 'Irish, Middle (900-1200)' },
319
+ { code3: 'mic', code2: '', name: "Mi'kmaq; Micmac" },
320
+ { code3: 'min', code2: '', name: 'Minangkabau' },
321
+ { code3: 'mis', code2: '', name: 'Uncoded languages' },
322
+ { code3: 'mkd', code2: 'mk', name: 'Macedonian' },
323
+ { code3: 'mkh', code2: '', name: 'Mon-Khmer languages' },
324
+ { code3: 'mlg', code2: 'mg', name: 'Malagasy' },
325
+ { code3: 'mlt', code2: 'mt', name: 'Maltese' },
326
+ { code3: 'mnc', code2: '', name: 'Manchu' },
327
+ { code3: 'mni', code2: '', name: 'Manipuri' },
328
+ { code3: 'mno', code2: '', name: 'Manobo languages' },
329
+ { code3: 'moh', code2: '', name: 'Mohawk' },
330
+ { code3: 'mon', code2: 'mn', name: 'Mongolian' },
331
+ { code3: 'mos', code2: '', name: 'Mossi' },
332
+ { code3: 'mri', code2: 'mi', name: 'Maori' },
333
+ { code3: 'msa', code2: 'ms', name: 'Malay' },
334
+ { code3: 'mul', code2: '', name: 'Multiple languages' },
335
+ { code3: 'mun', code2: '', name: 'Munda languages' },
336
+ { code3: 'mus', code2: '', name: 'Creek' },
337
+ { code3: 'mwl', code2: '', name: 'Mirandese' },
338
+ { code3: 'mwr', code2: '', name: 'Marwari' },
339
+ { code3: 'mya', code2: 'my', name: 'Burmese' },
340
+ { code3: 'myn', code2: '', name: 'Mayan languages' },
341
+ { code3: 'myv', code2: '', name: 'Erzya' },
342
+ { code3: 'nah', code2: '', name: 'Nahuatl languages' },
343
+ { code3: 'nai', code2: '', name: 'North American Indian languages' },
344
+ { code3: 'nap', code2: '', name: 'Neapolitan' },
345
+ { code3: 'nau', code2: 'na', name: 'Nauru' },
346
+ { code3: 'nav', code2: 'nv', name: 'Navajo; Navaho' },
347
+ { code3: 'nbl', code2: 'nr', name: 'Ndebele, South; South Ndebele' },
348
+ { code3: 'nde', code2: 'nd', name: 'Ndebele, North; North Ndebele' },
349
+ { code3: 'ndo', code2: 'ng', name: 'Ndonga' },
350
+ {
351
+ code3: 'nds',
352
+ code2: '',
353
+ name: 'Low German; Low Saxon; German, Low; Saxon, Low',
354
+ },
355
+ { code3: 'nep', code2: 'ne', name: 'Nepali' },
356
+ { code3: 'new', code2: '', name: 'Nepal Bhasa; Newari' },
357
+ { code3: 'nia', code2: '', name: 'Nias' },
358
+ { code3: 'nic', code2: '', name: 'Niger-Kordofanian languages' },
359
+ { code3: 'niu', code2: '', name: 'Niuean' },
360
+ { code3: 'nld', code2: 'nl', name: 'Dutch; Flemish' },
361
+ { code3: 'nno', code2: 'nn', name: 'Norwegian Nynorsk; Nynorsk, Norwegian' },
362
+ { code3: 'nob', code2: 'nb', name: 'Bokmål, Norwegian; Norwegian Bokmål' },
363
+ { code3: 'nog', code2: '', name: 'Nogai' },
364
+ { code3: 'non', code2: '', name: 'Norse, Old' },
365
+ { code3: 'nor', code2: 'no', name: 'Norwegian' },
366
+ { code3: 'nqo', code2: '', name: "N'Ko" },
367
+ { code3: 'nso', code2: '', name: 'Pedi; Sepedi; Northern Sotho' },
368
+ { code3: 'nub', code2: '', name: 'Nubian languages' },
369
+ {
370
+ code3: 'nwc',
371
+ code2: '',
372
+ name: 'Classical Newari; Old Newari; Classical Nepal Bhasa',
373
+ },
374
+ { code3: 'nya', code2: 'ny', name: 'Chichewa; Chewa; Nyanja' },
375
+ { code3: 'nym', code2: '', name: 'Nyamwezi' },
376
+ { code3: 'nyn', code2: '', name: 'Nyankole' },
377
+ { code3: 'nyo', code2: '', name: 'Nyoro' },
378
+ { code3: 'nzi', code2: '', name: 'Nzima' },
379
+ { code3: 'oci', code2: 'oc', name: 'Occitan (post 1500)' },
380
+ { code3: 'oji', code2: 'oj', name: 'Ojibwa' },
381
+ { code3: 'ori', code2: 'or', name: 'Oriya' },
382
+ { code3: 'orm', code2: 'om', name: 'Oromo' },
383
+ { code3: 'osa', code2: '', name: 'Osage' },
384
+ { code3: 'oss', code2: 'os', name: 'Ossetian; Ossetic' },
385
+ { code3: 'ota', code2: '', name: 'Turkish, Ottoman (1500-1928)' },
386
+ { code3: 'oto', code2: '', name: 'Otomian languages' },
387
+ { code3: 'paa', code2: '', name: 'Papuan languages' },
388
+ { code3: 'pag', code2: '', name: 'Pangasinan' },
389
+ { code3: 'pal', code2: ' ', name: 'Pahlavi' },
390
+ { code3: 'pam', code2: ' ', name: 'Pampanga; Kapampangan' },
391
+ { code3: 'pan', code2: 'paPanjabi; Punjabi', name: 'pendjabi' },
392
+ { code3: 'pap', code2: ' ', name: 'Papiamento' },
393
+ { code3: 'pau', code2: ' ', name: 'Palauan' },
394
+ { code3: 'peo', code2: ' ', name: 'Persian, Old (ca.600-400 B.C.)' },
395
+ { code3: 'per', code2: 'fa', name: 'Persian' },
396
+ { code3: 'phi', code2: ' ', name: 'Philippine languages' },
397
+ { code3: 'phn', code2: ' ', name: 'Phoenician' },
398
+ { code3: 'pli', code2: 'pi', name: 'Pali' },
399
+ { code3: 'pol', code2: 'pl', name: 'Polish' },
400
+ { code3: 'pon', code2: ' ', name: 'Pohnpeian' },
401
+ { code3: 'por', code2: 'pt', name: 'Portuguese' },
402
+ { code3: 'pra', code2: ' ', name: 'Prakrit languages' },
403
+ {
404
+ code3: 'pro',
405
+ code2: ' ',
406
+ name: 'Provençal, Old (to 1500);Occitan, Old (to 1500)',
407
+ },
408
+ { code3: 'pus', code2: 'ps', name: 'Pushto; Pashto' },
409
+ { code3: 'que', code2: 'qu', name: 'Quechua' },
410
+ { code3: 'raj', code2: ' ', name: 'Rajasthani' },
411
+ { code3: 'rap', code2: ' ', name: 'Rapanui' },
412
+ { code3: 'rar', code2: ' ', name: 'Rarotongan; Cook Islands Maori' },
413
+ { code3: 'roa', code2: ' ', name: 'Romance languages' },
414
+ { code3: 'roh', code2: 'rm', name: 'Romansh' },
415
+ { code3: 'rom', code2: ' ', name: 'Romany' },
416
+ { code3: 'rum', code2: 'ro', name: 'Romanian; Moldavian; Moldovan' },
417
+ { code3: 'ron', code2: 'ro', name: 'Romanian; Moldavian; Moldovan' },
418
+ { code3: 'run', code2: 'rn', name: 'Rundi' },
419
+ { code3: 'rup', code2: ' ', name: 'Aromanian; Arumanian; Macedo-Romanian' },
420
+ { code3: 'rus', code2: 'ru', name: 'Russian' },
421
+ { code3: 'sad', code2: ' ', name: 'Sandawe' },
422
+ { code3: 'sag', code2: 'sg', name: 'Sango' },
423
+ { code3: 'sah', code2: ' ', name: 'Yakut' },
424
+ { code3: 'sai', code2: ' ', name: 'South American Indian languages' },
425
+ { code3: 'sal', code2: ' ', name: 'Salishan languages' },
426
+ { code3: 'sam', code2: ' ', name: 'Samaritan Aramaic' },
427
+ { code3: 'san', code2: 'sa', name: 'Sanskrit' },
428
+ { code3: 'sas', code2: ' ', name: 'Sasak' },
429
+ { code3: 'sat', code2: ' ', name: 'Santali' },
430
+ { code3: 'scn', code2: ' ', name: 'Sicilian' },
431
+ { code3: 'sco', code2: ' ', name: 'Scots' },
432
+ { code3: 'sel', code2: ' ', name: 'Selkup' },
433
+ { code3: 'sem', code2: ' ', name: 'Semitic languages' },
434
+ { code3: 'sga', code2: ' ', name: 'Irish, Old (to 900)' },
435
+ { code3: 'sgn', code2: ' ', name: 'Sign Languages' },
436
+ { code3: 'shn', code2: ' ', name: 'Shan' },
437
+ { code3: 'sid', code2: ' ', name: 'Sidamo' },
438
+ { code3: 'sin', code2: 'si', name: 'Sinhala; Sinhalese' },
439
+ { code3: 'sio', code2: ' ', name: 'Siouan languages' },
440
+ { code3: 'sit', code2: ' ', name: 'Sino-Tibetan languages' },
441
+ { code3: 'sla', code2: ' ', name: 'Slavic languages' },
442
+ { code3: 'slo', code2: 'sk', name: 'Slovak' },
443
+ { code3: 'slk', code2: 'sk', name: 'Slovak' },
444
+ { code3: 'slv', code2: 'sl', name: 'Slovenian' },
445
+ { code3: 'sma', code2: ' ', name: 'Southern Sami' },
446
+ { code3: 'sme', code2: 'se', name: 'Northern Sami' },
447
+ { code3: 'smi', code2: ' ', name: 'Sami languages' },
448
+ { code3: 'smj', code2: ' ', name: 'Lule Sami' },
449
+ { code3: 'smn', code2: ' ', name: 'Inari Sami' },
450
+ { code3: 'smo', code2: 'sm', name: 'Samoan' },
451
+ { code3: 'sms', code2: ' ', name: 'Skolt Sami' },
452
+ { code3: 'sna', code2: 'sn', name: 'Shona' },
453
+ { code3: 'snd', code2: 'sd', name: 'Sindhi' },
454
+ { code3: 'snk', code2: ' ', name: 'Soninke' },
455
+ { code3: 'sog', code2: ' ', name: 'Sogdian' },
456
+ { code3: 'som', code2: 'so', name: 'Somali' },
457
+ { code3: 'son', code2: ' ', name: 'Songhai languages' },
458
+ { code3: 'sot', code2: 'st', name: 'Sotho, Southern' },
459
+ { code3: 'spa', code2: 'es', name: 'Spanish' },
460
+ { code3: 'sqi', code2: 'sq', name: 'Albanian' },
461
+ { code3: 'srd', code2: 'sc', name: 'Sardinian' },
462
+ { code3: 'srn', code2: ' ', name: 'Sranan Tongo' },
463
+ { code3: 'srp', code2: 'sr', name: 'Serbian' },
464
+ { code3: 'srr', code2: ' ', name: 'Serer' },
465
+ { code3: 'ssa', code2: ' ', name: 'Nilo-Saharan languages' },
466
+ { code3: 'ssw', code2: 'ss', name: 'Swati' },
467
+ { code3: 'suk', code2: ' ', name: 'Sukuma' },
468
+ { code3: 'sun', code2: 'su', name: 'Sundanese' },
469
+ { code3: 'sus', code2: ' ', name: 'Susu' },
470
+ { code3: 'sux', code2: ' ', name: 'Sumerian' },
471
+ { code3: 'swa', code2: 'sw', name: 'Swahili' },
472
+ { code3: 'swe', code2: 'sv', name: 'Swedish' },
473
+ { code3: 'syc', code2: ' ', name: 'Classical Syriac' },
474
+ { code3: 'syr', code2: ' ', name: 'Syriac' },
475
+ { code3: 'tah', code2: 'ty', name: 'Tahitian' },
476
+ { code3: 'tai', code2: ' ', name: 'Tai languages' },
477
+ { code3: 'tam', code2: 'ta', name: 'Tamil' },
478
+ { code3: 'tat', code2: 'tt', name: 'Tatar' },
479
+ { code3: 'tel', code2: 'te', name: 'Telugu' },
480
+ { code3: 'tem', code2: ' ', name: 'Timne' },
481
+ { code3: 'ter', code2: ' ', name: 'Tereno' },
482
+ { code3: 'tet', code2: ' ', name: 'Tetum' },
483
+ { code3: 'tgk', code2: 'tg', name: 'Tajik' },
484
+ { code3: 'tgl', code2: 'tl', name: 'Tagalog' },
485
+ { code3: 'tha', code2: 'th', name: 'Thai' },
486
+ { code3: 'tib', code2: 'bo', name: 'Tibetan' },
487
+ { code3: 'tig', code2: ' ', name: 'Tigre' },
488
+ { code3: 'tir', code2: 'ti', name: 'Tigrinya' },
489
+ { code3: 'tiv', code2: ' ', name: 'Tiv' },
490
+ { code3: 'tkl', code2: ' ', name: 'Tokelau' },
491
+ { code3: 'tlh', code2: ' ', name: 'Klingon; tlhIngan-Hol' },
492
+ { code3: 'tli', code2: ' ', name: 'Tlingit' },
493
+ { code3: 'tmh', code2: ' ', name: 'Tamashek' },
494
+ { code3: 'tog', code2: ' ', name: 'Tonga (Nyasa)' },
495
+ { code3: 'ton', code2: 'to', name: 'Tonga (Tonga Islands)' },
496
+ { code3: 'tpi', code2: ' ', name: 'Tok Pisin' },
497
+ { code3: 'tsi', code2: ' ', name: 'Tsimshian' },
498
+ { code3: 'tsn', code2: 'tn', name: 'Tswana' },
499
+ { code3: 'tso', code2: 'ts', name: 'Tsonga' },
500
+ { code3: 'tuk', code2: 'tk', name: 'Turkmen' },
501
+ { code3: 'tum', code2: ' ', name: 'Tumbuka' },
502
+ { code3: 'tup', code2: ' ', name: 'Tupi languages' },
503
+ { code3: 'tur', code2: 'tr', name: 'Turkish' },
504
+ { code3: 'tut', code2: ' ', name: 'Altaic languages' },
505
+ { code3: 'tvl', code2: ' ', name: 'Tuvalu' },
506
+ { code3: 'twi', code2: 'tw', name: 'Twi' },
507
+ { code3: 'tyv', code2: ' ', name: 'Tuvinian' },
508
+ { code3: 'udm', code2: ' ', name: 'Udmurt' },
509
+ { code3: 'uga', code2: ' ', name: 'Ugaritic' },
510
+ { code3: 'uig', code2: 'ug', name: 'Uighur; Uyghur' },
511
+ { code3: 'ukr', code2: 'uk', name: 'Ukrainian' },
512
+ { code3: 'umb', code2: ' ', name: 'Umbundu' },
513
+ { code3: 'und', code2: ' ', name: 'Undetermined' },
514
+ { code3: 'urd', code2: 'ur', name: 'Urdu' },
515
+ { code3: 'uzb', code2: 'uz', name: 'Uzbek' },
516
+ { code3: 'vai', code2: ' ', name: 'Vai' },
517
+ { code3: 'ven', code2: 've', name: 'Venda' },
518
+ { code3: 'vie', code2: 'vi', name: 'Vietnamese' },
519
+ { code3: 'vol', code2: 'vo', name: 'Volapük' },
520
+ { code3: 'vot', code2: ' ', name: 'Votic' },
521
+ { code3: 'wak', code2: ' ', name: 'Wakashan languages' },
522
+ { code3: 'wal', code2: ' ', name: 'Wolaitta; Wolaytta' },
523
+ { code3: 'war', code2: ' ', name: 'Waray' },
524
+ { code3: 'was', code2: ' ', name: 'Washo' },
525
+ { code3: 'wel', code2: 'cy', name: 'Welsh' },
526
+ { code3: 'wen', code2: ' ', name: 'Sorbian languages' },
527
+ { code3: 'wln', code2: 'wa', name: 'Walloon' },
528
+ { code3: 'wol', code2: 'wo', name: 'Wolof' },
529
+ { code3: 'xal', code2: ' ', name: 'Kalmyk; Oirat' },
530
+ { code3: 'xho', code2: 'xh', name: 'Xhosa' },
531
+ { code3: 'yao', code2: ' ', name: 'Yao' },
532
+ { code3: 'yap', code2: ' ', name: 'Yapese' },
533
+ { code3: 'yid', code2: 'yi', name: 'Yiddish' },
534
+ { code3: 'yor', code2: 'yo', name: 'Yoruba' },
535
+ { code3: 'ypk', code2: ' ', name: 'Yupik languages' },
536
+ { code3: 'zap', code2: ' ', name: 'Zapotec' },
537
+ { code3: 'zbl', code2: ' ', name: 'Blissymbols; Blissymbolics; Bliss' },
538
+ { code3: 'zen', code2: ' ', name: 'Zenaga' },
539
+ { code3: 'zgh', code2: ' ', name: 'Standard Moroccan Tamazight' },
540
+ { code3: 'zha', code2: 'za', name: 'Zhuang; Chuang' },
541
+ { code3: 'zho', code2: 'zh', name: 'Chinese' },
542
+ { code3: 'znd', code2: ' ', name: 'Zande languages' },
543
+ { code3: 'zul', code2: 'zu', name: 'Zulu' },
544
+ { code3: 'zun', code2: ' ', name: 'Zuni' },
545
+ {
546
+ code3: 'zza',
547
+ code2: '',
548
+ name: 'Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki',
549
+ },
550
+ ]
551
+
552
+ export const LANGUAGES_MAP_CODE3 = Object.fromEntries(
553
+ LANGUAGES.map((lang) => [lang.code3, lang]),
554
+ )
555
+
556
+ export function code3ToCode2(lang: string): string {
557
+ if (lang.length === 3) {
558
+ return LANGUAGES_MAP_CODE3[lang]?.code2 || lang
559
+ }
560
+ return lang
561
+ }
@@ -1,7 +1,15 @@
1
+ import {
2
+ AppBskyActorProfile,
3
+ AppBskyFeedGenerator,
4
+ AppBskyFeedPost,
5
+ AppBskyGraphList,
6
+ } from '@atproto/api'
7
+
1
8
  import { ModerationService } from '.'
2
9
  import { ModSubject } from './subject'
3
10
  import { ModerationSubjectStatusRow } from './types'
4
11
  import { langLogger as log } from '../logger'
12
+ import { code3ToCode2 } from './lang-data'
5
13
 
6
14
  export class ModerationLangService {
7
15
  constructor(private moderationService: ModerationService) {}
@@ -40,6 +48,23 @@ export class ModerationLangService {
40
48
  }
41
49
  }
42
50
 
51
+ getTextFromRecord(recordValue?: Record<string, unknown>): string | undefined {
52
+ let text: string | undefined
53
+
54
+ if (AppBskyGraphList.isRecord(recordValue)) {
55
+ text = recordValue.description || recordValue.name
56
+ } else if (
57
+ AppBskyFeedGenerator.isRecord(recordValue) ||
58
+ AppBskyActorProfile.isRecord(recordValue)
59
+ ) {
60
+ text = recordValue.description || recordValue.displayName
61
+ } else if (AppBskyFeedPost.isRecord(recordValue)) {
62
+ text = recordValue.text
63
+ }
64
+
65
+ return text?.trim()
66
+ }
67
+
43
68
  async getRecordLang({
44
69
  subject,
45
70
  }: {
@@ -70,10 +95,19 @@ export class ModerationLangService {
70
95
  ])
71
96
  const record = recordByUri.get(subject.uri)
72
97
  const recordLang = record?.value.langs as string[] | null
98
+ const recordText = this.getTextFromRecord(record?.value)
73
99
  if (recordLang?.length) {
74
100
  recordLang
75
101
  .map((lang) => lang.split('-')[0])
76
102
  .forEach((lang) => langs.add(lang))
103
+ } else if (recordText) {
104
+ // 'lande' is an esm module, so we need to import it dynamically
105
+ const { default: lande } = await import('lande')
106
+ const detectedLanguages = lande(recordText)
107
+ if (detectedLanguages.length) {
108
+ const langCode = code3ToCode2(detectedLanguages[0][0])
109
+ if (langCode) langs.add(langCode)
110
+ }
77
111
  }
78
112
  }
79
113