ochre-sdk 1.3.5 → 1.3.6

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,554 @@
1
+ //#region src/languages.ts
2
+ /**
3
+ * Every language code OCHRE publishes, mapped to the ISO 639-3 and BCP 47
4
+ * codes it stands for
5
+ *
6
+ * OCHRE publishes ISO 639-2/B codes, the Library of Congress MARC
7
+ * convention: the bibliographic code wherever ISO 639-2 has one (`per`,
8
+ * not ISO 639-3 `fas`), the ISO 639-3 identifier where it has none
9
+ * (`yua`), and a few codes of its own (`ota-xlt`, `rel`), some of which
10
+ * collide with unrelated ISO 639-3 languages. Key everything by these codes,
11
+ * because they are what OCHRE serves, and convert through this table when a
12
+ * standard code is needed.
13
+ */
14
+ const OCHRE_LANGUAGES = {
15
+ akk: {
16
+ name: "Akkadian",
17
+ kind: "language",
18
+ iso639_3: "akk",
19
+ bcp47: "akk"
20
+ },
21
+ xno: {
22
+ name: "Anglo-Norman",
23
+ kind: "language",
24
+ iso639_3: "xno",
25
+ bcp47: "xno"
26
+ },
27
+ ara: {
28
+ name: "Arabic",
29
+ kind: "language",
30
+ iso639_3: "ara",
31
+ bcp47: "ar"
32
+ },
33
+ arc: {
34
+ name: "Aramaic",
35
+ kind: "language",
36
+ iso639_3: "arc",
37
+ bcp47: "arc"
38
+ },
39
+ arm: {
40
+ name: "Armenian",
41
+ kind: "language",
42
+ iso639_3: "hye",
43
+ bcp47: "hy"
44
+ },
45
+ bel: {
46
+ name: "Belarusian",
47
+ kind: "language",
48
+ iso639_3: "bel",
49
+ bcp47: "be"
50
+ },
51
+ ben: {
52
+ name: "Bengali",
53
+ kind: "language",
54
+ iso639_3: "ben",
55
+ bcp47: "bn"
56
+ },
57
+ btc: {
58
+ name: "Betacode",
59
+ kind: "vocabulary",
60
+ iso639_3: null,
61
+ bcp47: "grc-Latn-x-betacode"
62
+ },
63
+ bos: {
64
+ name: "Bosnian",
65
+ kind: "language",
66
+ iso639_3: "bos",
67
+ bcp47: "bs"
68
+ },
69
+ bul: {
70
+ name: "Bulgarian",
71
+ kind: "language",
72
+ iso639_3: "bul",
73
+ bcp47: "bg"
74
+ },
75
+ cnn: {
76
+ name: "Canaanite",
77
+ kind: "language",
78
+ iso639_3: null,
79
+ bcp47: null
80
+ },
81
+ yue: {
82
+ name: "Cantonese",
83
+ kind: "language",
84
+ iso639_3: "yue",
85
+ bcp47: "yue"
86
+ },
87
+ cat: {
88
+ name: "Catalan",
89
+ kind: "language",
90
+ iso639_3: "cat",
91
+ bcp47: "ca"
92
+ },
93
+ chi: {
94
+ name: "Chinese",
95
+ kind: "language",
96
+ iso639_3: "zho",
97
+ bcp47: "zh"
98
+ },
99
+ chu: {
100
+ name: "Church Slavonic",
101
+ kind: "language",
102
+ iso639_3: "chu",
103
+ bcp47: "cu"
104
+ },
105
+ lzh: {
106
+ name: "Classical Chinese",
107
+ kind: "language",
108
+ iso639_3: "lzh",
109
+ bcp47: "lzh"
110
+ },
111
+ cop: {
112
+ name: "Coptic",
113
+ kind: "language",
114
+ iso639_3: "cop",
115
+ bcp47: "cop"
116
+ },
117
+ hrv: {
118
+ name: "Croatian",
119
+ kind: "language",
120
+ iso639_3: "hrv",
121
+ bcp47: "hr"
122
+ },
123
+ cze: {
124
+ name: "Czech",
125
+ kind: "language",
126
+ iso639_3: "ces",
127
+ bcp47: "cs"
128
+ },
129
+ egyd: {
130
+ name: "Demotic",
131
+ kind: "language",
132
+ iso639_3: "egy",
133
+ bcp47: "egy-Egyd"
134
+ },
135
+ nld: {
136
+ name: "Dutch",
137
+ kind: "language",
138
+ iso639_3: "nld",
139
+ bcp47: "nl"
140
+ },
141
+ dum: {
142
+ name: "Dutch (Middle)",
143
+ kind: "language",
144
+ iso639_3: "dum",
145
+ bcp47: "dum"
146
+ },
147
+ egy: {
148
+ name: "Egyptian",
149
+ kind: "language",
150
+ iso639_3: "egy",
151
+ bcp47: "egy"
152
+ },
153
+ elx: {
154
+ name: "Elamite",
155
+ kind: "language",
156
+ iso639_3: "elx",
157
+ bcp47: "elx"
158
+ },
159
+ eng: {
160
+ name: "English",
161
+ kind: "language",
162
+ iso639_3: "eng",
163
+ bcp47: "en"
164
+ },
165
+ enm: {
166
+ name: "English (Middle)",
167
+ kind: "language",
168
+ iso639_3: "enm",
169
+ bcp47: "enm"
170
+ },
171
+ ecy: {
172
+ name: "Eteocypriot",
173
+ kind: "language",
174
+ iso639_3: "ecy",
175
+ bcp47: "ecy"
176
+ },
177
+ fre: {
178
+ name: "French",
179
+ kind: "language",
180
+ iso639_3: "fra",
181
+ bcp47: "fr"
182
+ },
183
+ frm: {
184
+ name: "French (Middle)",
185
+ kind: "language",
186
+ iso639_3: "frm",
187
+ bcp47: "frm"
188
+ },
189
+ fro: {
190
+ name: "French (Old)",
191
+ kind: "language",
192
+ iso639_3: "fro",
193
+ bcp47: "fro"
194
+ },
195
+ geo: {
196
+ name: "Georgian",
197
+ kind: "language",
198
+ iso639_3: "kat",
199
+ bcp47: "ka"
200
+ },
201
+ ger: {
202
+ name: "German",
203
+ kind: "language",
204
+ iso639_3: "deu",
205
+ bcp47: "de"
206
+ },
207
+ nds: {
208
+ name: "German (Low)",
209
+ kind: "language",
210
+ iso639_3: "nds",
211
+ bcp47: "nds"
212
+ },
213
+ gmh: {
214
+ name: "German (Middle High)",
215
+ kind: "language",
216
+ iso639_3: "gmh",
217
+ bcp47: "gmh"
218
+ },
219
+ goh: {
220
+ name: "German (Old High)",
221
+ kind: "language",
222
+ iso639_3: "goh",
223
+ bcp47: "goh"
224
+ },
225
+ grc: {
226
+ name: "Greek",
227
+ kind: "language",
228
+ iso639_3: "grc",
229
+ bcp47: "grc"
230
+ },
231
+ guj: {
232
+ name: "Gujarati",
233
+ kind: "language",
234
+ iso639_3: "guj",
235
+ bcp47: "gu"
236
+ },
237
+ "zh-Latn-pinyin": {
238
+ name: "Hanyu Pinyin",
239
+ kind: "transliteration",
240
+ iso639_3: "cmn",
241
+ bcp47: "zh-Latn-pinyin"
242
+ },
243
+ htt: {
244
+ name: "Hattian",
245
+ kind: "language",
246
+ iso639_3: "xht",
247
+ bcp47: "xht"
248
+ },
249
+ heb: {
250
+ name: "Hebrew",
251
+ kind: "language",
252
+ iso639_3: "heb",
253
+ bcp47: "he"
254
+ },
255
+ hin: {
256
+ name: "Hindi",
257
+ kind: "language",
258
+ iso639_3: "hin",
259
+ bcp47: "hi"
260
+ },
261
+ hit: {
262
+ name: "Hittite",
263
+ kind: "language",
264
+ iso639_3: "hit",
265
+ bcp47: "hit"
266
+ },
267
+ xhu: {
268
+ name: "Hurrian",
269
+ kind: "language",
270
+ iso639_3: "xhu",
271
+ bcp47: "xhu"
272
+ },
273
+ ita: {
274
+ name: "Italian",
275
+ kind: "language",
276
+ iso639_3: "ita",
277
+ bcp47: "it"
278
+ },
279
+ jpn: {
280
+ name: "Japanese",
281
+ kind: "language",
282
+ iso639_3: "jpn",
283
+ bcp47: "ja"
284
+ },
285
+ "jpn-xlt": {
286
+ name: "Japanese XLit",
287
+ kind: "transliteration",
288
+ iso639_3: "jpn",
289
+ bcp47: "ja-Latn-t-ja"
290
+ },
291
+ kaz: {
292
+ name: "Kazakh",
293
+ kind: "language",
294
+ iso639_3: "kaz",
295
+ bcp47: "kk"
296
+ },
297
+ kor: {
298
+ name: "Korean",
299
+ kind: "language",
300
+ iso639_3: "kor",
301
+ bcp47: "ko"
302
+ },
303
+ lmc: {
304
+ name: "Late Middle Chinese",
305
+ kind: "language",
306
+ iso639_3: "ltc",
307
+ bcp47: "ltc"
308
+ },
309
+ lat: {
310
+ name: "Latin",
311
+ kind: "language",
312
+ iso639_3: "lat",
313
+ bcp47: "la"
314
+ },
315
+ xlt: {
316
+ name: "Latin XLit",
317
+ kind: "transliteration",
318
+ iso639_3: null,
319
+ bcp47: "und-Latn"
320
+ },
321
+ luw: {
322
+ name: "Luwian",
323
+ kind: "language",
324
+ iso639_3: null,
325
+ bcp47: null
326
+ },
327
+ cmn: {
328
+ name: "Mandarin",
329
+ kind: "language",
330
+ iso639_3: "cmn",
331
+ bcp47: "cmn"
332
+ },
333
+ mar: {
334
+ name: "Marathi",
335
+ kind: "language",
336
+ iso639_3: "mar",
337
+ bcp47: "mr"
338
+ },
339
+ met: {
340
+ name: "Metrical",
341
+ kind: "vocabulary",
342
+ iso639_3: null,
343
+ bcp47: null
344
+ },
345
+ zxx: {
346
+ name: "No linguistic content",
347
+ kind: "non-linguistic",
348
+ iso639_3: "zxx",
349
+ bcp47: "zxx"
350
+ },
351
+ och: {
352
+ name: "Old Chinese",
353
+ kind: "language",
354
+ iso639_3: "och",
355
+ bcp47: "och"
356
+ },
357
+ peo: {
358
+ name: "Old Persian",
359
+ kind: "language",
360
+ iso639_3: "peo",
361
+ bcp47: "peo"
362
+ },
363
+ ota: {
364
+ name: "Ottoman Turkish",
365
+ kind: "language",
366
+ iso639_3: "ota",
367
+ bcp47: "ota"
368
+ },
369
+ "ota-xlt": {
370
+ name: "Ottoman Turkish XLit",
371
+ kind: "transliteration",
372
+ iso639_3: "ota",
373
+ bcp47: "ota-Latn-t-ota-arab"
374
+ },
375
+ pla: {
376
+ name: "Palaic",
377
+ kind: "language",
378
+ iso639_3: "plq",
379
+ bcp47: "plq"
380
+ },
381
+ per: {
382
+ name: "Persian",
383
+ kind: "language",
384
+ iso639_3: "fas",
385
+ bcp47: "fa"
386
+ },
387
+ phn: {
388
+ name: "Phoenician",
389
+ kind: "language",
390
+ iso639_3: "phn",
391
+ bcp47: "phn"
392
+ },
393
+ xpg: {
394
+ name: "Phrygian",
395
+ kind: "language",
396
+ iso639_3: "xpg",
397
+ bcp47: "xpg"
398
+ },
399
+ pol: {
400
+ name: "Polish",
401
+ kind: "language",
402
+ iso639_3: "pol",
403
+ bcp47: "pl"
404
+ },
405
+ por: {
406
+ name: "Portuguese",
407
+ kind: "language",
408
+ iso639_3: "por",
409
+ bcp47: "pt"
410
+ },
411
+ pro: {
412
+ name: "Pronunciation",
413
+ kind: "vocabulary",
414
+ iso639_3: null,
415
+ bcp47: null
416
+ },
417
+ rel: {
418
+ name: "Relator",
419
+ kind: "vocabulary",
420
+ iso639_3: null,
421
+ bcp47: "zxx"
422
+ },
423
+ rus: {
424
+ name: "Russian",
425
+ kind: "language",
426
+ iso639_3: "rus",
427
+ bcp47: "ru"
428
+ },
429
+ san: {
430
+ name: "Sanskrit",
431
+ kind: "language",
432
+ iso639_3: "san",
433
+ bcp47: "sa"
434
+ },
435
+ srp: {
436
+ name: "Serbian",
437
+ kind: "language",
438
+ iso639_3: "srp",
439
+ bcp47: "sr"
440
+ },
441
+ spa: {
442
+ name: "Spanish",
443
+ kind: "language",
444
+ iso639_3: "spa",
445
+ bcp47: "es"
446
+ },
447
+ sux: {
448
+ name: "Sumerian",
449
+ kind: "language",
450
+ iso639_3: "sux",
451
+ bcp47: "sux"
452
+ },
453
+ sup: {
454
+ name: "Supplemental",
455
+ kind: "vocabulary",
456
+ iso639_3: null,
457
+ bcp47: null
458
+ },
459
+ syc: {
460
+ name: "Syriac",
461
+ kind: "language",
462
+ iso639_3: "syc",
463
+ bcp47: "syc"
464
+ },
465
+ tei: {
466
+ name: "TEI",
467
+ kind: "vocabulary",
468
+ iso639_3: null,
469
+ bcp47: null
470
+ },
471
+ tur: {
472
+ name: "Turkish",
473
+ kind: "language",
474
+ iso639_3: "tur",
475
+ bcp47: "tr"
476
+ },
477
+ uga: {
478
+ name: "Ugaritic",
479
+ kind: "language",
480
+ iso639_3: "uga",
481
+ bcp47: "uga"
482
+ },
483
+ ukr: {
484
+ name: "Ukrainian",
485
+ kind: "language",
486
+ iso639_3: "ukr",
487
+ bcp47: "uk"
488
+ },
489
+ urd: {
490
+ name: "Urdu",
491
+ kind: "language",
492
+ iso639_3: "urd",
493
+ bcp47: "ur"
494
+ },
495
+ uzb: {
496
+ name: "Uzbek",
497
+ kind: "language",
498
+ iso639_3: "uzb",
499
+ bcp47: "uz"
500
+ },
501
+ var: {
502
+ name: "Variation",
503
+ kind: "vocabulary",
504
+ iso639_3: null,
505
+ bcp47: null
506
+ },
507
+ was: {
508
+ name: "Washo",
509
+ kind: "language",
510
+ iso639_3: "was",
511
+ bcp47: "was"
512
+ },
513
+ yid: {
514
+ name: "Yiddish",
515
+ kind: "language",
516
+ iso639_3: "yid",
517
+ bcp47: "yi"
518
+ },
519
+ yua: {
520
+ name: "Yucatec Maya",
521
+ kind: "language",
522
+ iso639_3: "yua",
523
+ bcp47: "yua"
524
+ }
525
+ };
526
+ /**
527
+ * Check whether a string is a language code OCHRE publishes
528
+ * @param code - The code to check
529
+ * @returns Whether OCHRE publishes the code
530
+ */
531
+ function isOchreLanguageCode(code) {
532
+ return Object.hasOwn(OCHRE_LANGUAGES, code);
533
+ }
534
+ /**
535
+ * Look up a language OCHRE publishes by its OCHRE code
536
+ * @param code - The OCHRE language code
537
+ * @returns The language, or null when OCHRE does not publish the code
538
+ */
539
+ function getOchreLanguage(code) {
540
+ return isOchreLanguageCode(code) ? OCHRE_LANGUAGES[code] : null;
541
+ }
542
+ /**
543
+ * Find the OCHRE code of a language from its ISO 639-3 identifier
544
+ * @param iso639_3 - The ISO 639-3 identifier
545
+ * @returns The OCHRE code of the language itself, not of a transliteration,
546
+ * or null when OCHRE publishes no code for it
547
+ */
548
+ function getOchreLanguageCode(iso639_3) {
549
+ if (isOchreLanguageCode(iso639_3) && OCHRE_LANGUAGES[iso639_3].iso639_3 === iso639_3) return iso639_3;
550
+ for (const [code, language] of Object.entries(OCHRE_LANGUAGES)) if (language.kind === "language" && language.iso639_3 === iso639_3 && isOchreLanguageCode(code)) return code;
551
+ return null;
552
+ }
553
+ //#endregion
554
+ export { OCHRE_LANGUAGES, getOchreLanguage, getOchreLanguageCode, isOchreLanguageCode };
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_LANGUAGES } from "../constants.mjs";
2
2
  import { readArrayProperty, readEntries } from "../reflection.mjs";
3
- import { iso639_3Schema } from "../schemas.mjs";
3
+ import { ochreLanguageCodeSchema } from "../schemas.mjs";
4
4
  import { parseStringLike } from "./helpers.mjs";
5
5
  import * as v from "valibot";
6
6
  //#region src/parsers/languages.ts
@@ -31,7 +31,7 @@ function collectContentLanguages(value, languages) {
31
31
  * @internal
32
32
  */
33
33
  function parseLanguages(languages) {
34
- for (const language of languages) v.parse(iso639_3Schema, language);
34
+ for (const language of languages) v.parse(ochreLanguageCodeSchema, language);
35
35
  return languages;
36
36
  }
37
37
  /**