ochre-sdk 1.3.5 → 1.3.7

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