@helloao/tools 0.2.0 → 0.4.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.
Files changed (81) hide show
  1. package/dist/cjs/generation/api.cjs +2213 -216
  2. package/dist/cjs/generation/api.cjs.map +3 -3
  3. package/dist/cjs/generation/audio.cjs +5 -5
  4. package/dist/cjs/generation/audio.cjs.map +1 -1
  5. package/dist/cjs/generation/book-order.cjs.map +1 -1
  6. package/dist/cjs/generation/common-types.cjs +782 -14
  7. package/dist/cjs/generation/common-types.cjs.map +2 -2
  8. package/dist/cjs/generation/dataset.cjs +13 -9
  9. package/dist/cjs/generation/dataset.cjs.map +2 -2
  10. package/dist/cjs/generation/index.cjs +8 -5
  11. package/dist/cjs/generation/index.cjs.map +2 -2
  12. package/dist/cjs/generation/simple.cjs +294 -0
  13. package/dist/cjs/generation/simple.cjs.map +7 -0
  14. package/dist/cjs/generation/theographic.cjs +446 -0
  15. package/dist/cjs/generation/theographic.cjs.map +7 -0
  16. package/dist/cjs/index.cjs +4 -4
  17. package/dist/cjs/index.cjs.map +1 -1
  18. package/dist/cjs/log.cjs.map +1 -1
  19. package/dist/cjs/parser/codex-parser.cjs +3 -3
  20. package/dist/cjs/parser/codex-parser.cjs.map +3 -3
  21. package/dist/cjs/parser/commentary-csv-parser.cjs +14 -3
  22. package/dist/cjs/parser/commentary-csv-parser.cjs.map +3 -3
  23. package/dist/cjs/parser/index.cjs +1 -1
  24. package/dist/cjs/parser/iterators.cjs.map +1 -1
  25. package/dist/cjs/parser/lockman-parser.cjs +1 -1
  26. package/dist/cjs/parser/lockman-parser.cjs.map +1 -1
  27. package/dist/cjs/parser/tyndale-xml-parser.cjs +1 -1
  28. package/dist/cjs/parser/tyndale-xml-parser.cjs.map +1 -1
  29. package/dist/cjs/parser/types.cjs.map +1 -1
  30. package/dist/cjs/parser/usfm-parser.cjs +2 -2
  31. package/dist/cjs/parser/usfm-parser.cjs.map +1 -1
  32. package/dist/cjs/parser/usx-parser.cjs +122 -26
  33. package/dist/cjs/parser/usx-parser.cjs.map +2 -2
  34. package/dist/cjs/parser/words.cjs +187 -0
  35. package/dist/cjs/parser/words.cjs.map +7 -0
  36. package/dist/cjs/utils.cjs +1 -1
  37. package/dist/esm/generation/api.js +2155 -214
  38. package/dist/esm/generation/api.js.map +3 -3
  39. package/dist/esm/generation/audio.js +1 -1
  40. package/dist/esm/generation/audio.js.map +1 -1
  41. package/dist/esm/generation/book-order.js.map +1 -1
  42. package/dist/esm/generation/common-types.js +738 -14
  43. package/dist/esm/generation/common-types.js.map +2 -2
  44. package/dist/esm/generation/dataset.js +6 -2
  45. package/dist/esm/generation/dataset.js.map +2 -2
  46. package/dist/esm/generation/index.js +2 -1
  47. package/dist/esm/generation/index.js.map +2 -2
  48. package/dist/esm/generation/simple.js +260 -0
  49. package/dist/esm/generation/simple.js.map +7 -0
  50. package/dist/esm/generation/theographic.js +412 -0
  51. package/dist/esm/generation/theographic.js.map +7 -0
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm/log.js.map +1 -1
  54. package/dist/esm/parser/codex-parser.js +3 -3
  55. package/dist/esm/parser/codex-parser.js.map +3 -3
  56. package/dist/esm/parser/commentary-csv-parser.js +3 -2
  57. package/dist/esm/parser/commentary-csv-parser.js.map +2 -2
  58. package/dist/esm/parser/iterators.js.map +1 -1
  59. package/dist/esm/parser/lockman-parser.js +1 -1
  60. package/dist/esm/parser/lockman-parser.js.map +1 -1
  61. package/dist/esm/parser/tyndale-xml-parser.js +1 -1
  62. package/dist/esm/parser/tyndale-xml-parser.js.map +1 -1
  63. package/dist/esm/parser/usfm-parser.js +1 -1
  64. package/dist/esm/parser/usfm-parser.js.map +1 -1
  65. package/dist/esm/parser/usx-parser.js +130 -26
  66. package/dist/esm/parser/usx-parser.js.map +2 -2
  67. package/dist/esm/parser/words.js +149 -0
  68. package/dist/esm/parser/words.js.map +7 -0
  69. package/dist/types/generation/api.d.ts +9006 -1101
  70. package/dist/types/generation/common-types.d.ts +1318 -106
  71. package/dist/types/generation/dataset.d.ts +17 -1
  72. package/dist/types/generation/index.d.ts +2 -1
  73. package/dist/types/generation/simple.d.ts +110 -0
  74. package/dist/types/generation/theographic.d.ts +64 -0
  75. package/dist/types/parser/commentary-csv-parser.d.ts +1 -1
  76. package/dist/types/parser/lockman-parser.d.ts +1 -1
  77. package/dist/types/parser/tyndale-xml-parser.d.ts +1 -1
  78. package/dist/types/parser/types.d.ts +63 -0
  79. package/dist/types/parser/usx-parser.d.ts +6 -5
  80. package/dist/types/parser/words.d.ts +104 -0
  81. package/package.json +3 -2
@@ -31,19 +31,52 @@ __export(api_exports, {
31
31
  ApiDatasetBookChapterSchema: () => ApiDatasetBookChapterSchema,
32
32
  ApiDatasetBookSchema: () => ApiDatasetBookSchema,
33
33
  ApiDatasetBooksSchema: () => ApiDatasetBooksSchema,
34
+ ApiDatasetChapterEventSchema: () => ApiDatasetChapterEventSchema,
35
+ ApiDatasetChapterPersonSchema: () => ApiDatasetChapterPersonSchema,
36
+ ApiDatasetChapterPlaceSchema: () => ApiDatasetChapterPlaceSchema,
37
+ ApiDatasetEntityBookChapterSchema: () => ApiDatasetEntityBookChapterSchema,
38
+ ApiDatasetEntityChapterDataSchema: () => ApiDatasetEntityChapterDataSchema,
39
+ ApiDatasetEventSchema: () => ApiDatasetEventSchema,
40
+ ApiDatasetEventSummarySchema: () => ApiDatasetEventSummarySchema,
41
+ ApiDatasetEventsSchema: () => ApiDatasetEventsSchema,
42
+ ApiDatasetPeopleGroupSchema: () => ApiDatasetPeopleGroupSchema,
43
+ ApiDatasetPeopleGroupSummarySchema: () => ApiDatasetPeopleGroupSummarySchema,
44
+ ApiDatasetPeopleGroupsSchema: () => ApiDatasetPeopleGroupsSchema,
45
+ ApiDatasetPeopleSchema: () => ApiDatasetPeopleSchema,
46
+ ApiDatasetPersonSchema: () => ApiDatasetPersonSchema,
47
+ ApiDatasetPersonSummarySchema: () => ApiDatasetPersonSummarySchema,
48
+ ApiDatasetPlaceSchema: () => ApiDatasetPlaceSchema,
49
+ ApiDatasetPlaceSummarySchema: () => ApiDatasetPlaceSummarySchema,
50
+ ApiDatasetPlacesSchema: () => ApiDatasetPlacesSchema,
34
51
  ApiDatasetSchema: () => ApiDatasetSchema,
52
+ ApiSimpleCommentaryBookChapterSchema: () => ApiSimpleCommentaryBookChapterSchema,
53
+ ApiSimpleTranslationBookChapterSchema: () => ApiSimpleTranslationBookChapterSchema,
54
+ ApiSimpleTranslationBookChapterWordsSchema: () => ApiSimpleTranslationBookChapterWordsSchema,
55
+ ApiSimpleTranslationCompleteBookSchema: () => ApiSimpleTranslationCompleteBookSchema,
56
+ ApiSimpleTranslationCompleteSchema: () => ApiSimpleTranslationCompleteSchema,
35
57
  ApiTranslationBookChapterAudioSchema: () => ApiTranslationBookChapterAudioSchema,
58
+ ApiTranslationBookChapterAudioTimingsSchema: () => ApiTranslationBookChapterAudioTimingsSchema,
36
59
  ApiTranslationBookChapterSchema: () => ApiTranslationBookChapterSchema,
60
+ ApiTranslationBookChapterWordsSchema: () => ApiTranslationBookChapterWordsSchema,
37
61
  ApiTranslationBookSchema: () => ApiTranslationBookSchema,
38
62
  ApiTranslationBooksSchema: () => ApiTranslationBooksSchema,
39
63
  ApiTranslationCompleteBookSchema: () => ApiTranslationCompleteBookSchema,
40
64
  ApiTranslationCompleteSchema: () => ApiTranslationCompleteSchema,
41
65
  ApiTranslationSchema: () => ApiTranslationSchema,
66
+ CommentaryChapterReferenceSchema: () => CommentaryChapterReferenceSchema,
67
+ DatasetChapterReferenceSchema: () => DatasetChapterReferenceSchema,
68
+ SIMPLE_JSON_EXTENSION: () => SIMPLE_JSON_EXTENSION,
69
+ SimpleTranslationCompleteChapterSchema: () => SimpleTranslationCompleteChapterSchema,
70
+ TranslationChapterReferenceSchema: () => TranslationChapterReferenceSchema,
71
+ TranslationCompleteChapterSchema: () => TranslationCompleteChapterSchema,
42
72
  bookChapterApiLink: () => bookChapterApiLink,
43
73
  bookChapterAudioApiLink: () => bookChapterAudioApiLink,
74
+ bookChapterAudioTimingsApiLink: () => bookChapterAudioTimingsApiLink,
75
+ bookChapterWordsApiLink: () => bookChapterWordsApiLink,
44
76
  bookCommentaryChapterApiLink: () => bookCommentaryChapterApiLink,
45
77
  bookDatasetChapterApiLink: () => bookDatasetChapterApiLink,
46
78
  completeTranslationApiLink: () => completeTranslationApiLink,
79
+ datasetEntityApiLink: () => datasetEntityApiLink,
47
80
  downloadedFile: () => downloadedFile,
48
81
  generateApiForDataset: () => generateApiForDataset,
49
82
  generateFilesForApi: () => generateFilesForApi,
@@ -52,6 +85,7 @@ __export(api_exports, {
52
85
  listOfBooksApiLink: () => listOfBooksApiLink,
53
86
  listOfCommentaryBooksApiLink: () => listOfCommentaryBooksApiLink,
54
87
  listOfDatasetBooksApiLink: () => listOfDatasetBooksApiLink,
88
+ listOfDatasetEntitiesApiLink: () => listOfDatasetEntitiesApiLink,
55
89
  profileCommentaryApiLink: () => profileCommentaryApiLink,
56
90
  profilesCommentaryApiLink: () => profilesCommentaryApiLink,
57
91
  replaceSpacesWithUnderscores: () => replaceSpacesWithUnderscores
@@ -59,7 +93,9 @@ __export(api_exports, {
59
93
  module.exports = __toCommonJS(api_exports);
60
94
  var import_zod = require("zod");
61
95
  var import_common_types = require("./common-types.js");
62
- var import_zod_openapi = require("zod-openapi");
96
+ var import_simple = require("./simple.js");
97
+ var import_utils = require("../utils.js");
98
+ var import_book_order = require("./book-order.js");
63
99
  const ApiAvailableTranslationsSchema = import_zod.z.object({
64
100
  /**
65
101
  * The list of translations.
@@ -138,6 +174,62 @@ const ApiDatasetSchema = import_common_types.DatasetSchema.extend({
138
174
  */
139
175
  languageEnglishName: import_zod.z.string().optional().meta({
140
176
  description: "Gets the name of the language in English. Null or undefined if the language doesn't have an english name."
177
+ }),
178
+ /**
179
+ * The API link for the list of people for this dataset.
180
+ * Omitted if the dataset doesn't contain people.
181
+ */
182
+ listOfPeopleApiLink: import_zod.z.string().optional().meta({
183
+ description: "The API link for the list of people for this dataset. Relative to the API origin. Omitted if the dataset doesn't contain people."
184
+ }),
185
+ /**
186
+ * The API link for the list of places for this dataset.
187
+ * Omitted if the dataset doesn't contain places.
188
+ */
189
+ listOfPlacesApiLink: import_zod.z.string().optional().meta({
190
+ description: "The API link for the list of places for this dataset. Relative to the API origin. Omitted if the dataset doesn't contain places."
191
+ }),
192
+ /**
193
+ * The API link for the list of events for this dataset.
194
+ * Omitted if the dataset doesn't contain events.
195
+ */
196
+ listOfEventsApiLink: import_zod.z.string().optional().meta({
197
+ description: "The API link for the list of events for this dataset. Relative to the API origin. Omitted if the dataset doesn't contain events."
198
+ }),
199
+ /**
200
+ * The API link for the list of people groups for this dataset.
201
+ * Omitted if the dataset doesn't contain people groups.
202
+ */
203
+ listOfPeopleGroupsApiLink: import_zod.z.string().optional().meta({
204
+ description: "The API link for the list of people groups for this dataset. Relative to the API origin. Omitted if the dataset doesn't contain people groups."
205
+ }),
206
+ /**
207
+ * The total number of people that are contained in this dataset.
208
+ * Omitted if the dataset doesn't contain people.
209
+ */
210
+ totalNumberOfPeople: import_zod.z.number().optional().meta({
211
+ description: "The total number of people that are contained in this dataset. Omitted if the dataset doesn't contain people."
212
+ }),
213
+ /**
214
+ * The total number of places that are contained in this dataset.
215
+ * Omitted if the dataset doesn't contain places.
216
+ */
217
+ totalNumberOfPlaces: import_zod.z.number().optional().meta({
218
+ description: "The total number of places that are contained in this dataset. Omitted if the dataset doesn't contain places."
219
+ }),
220
+ /**
221
+ * The total number of events that are contained in this dataset.
222
+ * Omitted if the dataset doesn't contain events.
223
+ */
224
+ totalNumberOfEvents: import_zod.z.number().optional().meta({
225
+ description: "The total number of events that are contained in this dataset. Omitted if the dataset doesn't contain events."
226
+ }),
227
+ /**
228
+ * The total number of people groups that are contained in this dataset.
229
+ * Omitted if the dataset doesn't contain people groups.
230
+ */
231
+ totalNumberOfPeopleGroups: import_zod.z.number().optional().meta({
232
+ description: "The total number of people groups that are contained in this dataset. Omitted if the dataset doesn't contain people groups."
141
233
  })
142
234
  }).meta({
143
235
  id: "ApiDataset",
@@ -217,6 +309,15 @@ const ApiTranslationSchema = import_common_types.TranslationSchema.extend({
217
309
  */
218
310
  completeTranslationApiLink: import_zod.z.string().optional().meta({
219
311
  description: "The API link for downloading the complete translation as a single JSON file. Relative to the API origin. Undefined if complete translation files are not available."
312
+ }),
313
+ /**
314
+ * The API link for downloading the complete translation as a single JSON file,
315
+ * using the simplified chapter format.
316
+ *
317
+ * Undefined if complete translation files are not available.
318
+ */
319
+ simpleCompleteTranslationApiLink: import_zod.z.string().optional().meta({
320
+ description: "The API link for downloading the complete translation as a single JSON file, using the simplified chapter format. Relative to the API origin. Undefined if complete translation files are not available."
220
321
  })
221
322
  }).meta({
222
323
  id: "ApiTranslation",
@@ -239,6 +340,42 @@ const ApiTranslationCompleteSchema = import_zod.z.object({
239
340
  id: "ApiTranslationComplete",
240
341
  description: "Defines the complete translation download data. Maps to the /api/:translationId/complete.json endpoint."
241
342
  });
343
+ const TranslationCompleteChapterSchema = import_common_types.TranslationBookChapterSchema.omit({ thisChapterWords: true }).extend({
344
+ /**
345
+ * The number of verses that the chapter contains.
346
+ */
347
+ numberOfVerses: import_zod.z.number().meta({
348
+ description: "The number of verses that the chapter contains."
349
+ }),
350
+ /**
351
+ * The link to the word-level annotations for the chapter.
352
+ * Omitted if the chapter doesn't have any word-level annotations.
353
+ */
354
+ thisChapterWordsLink: import_zod.z.string().optional().meta({
355
+ description: "The link to the word-level annotations for this chapter. Relative to the API origin. Omitted if the chapter doesn't have any word-level annotations."
356
+ })
357
+ }).meta({
358
+ id: "TranslationCompleteChapter",
359
+ description: "A chapter in the complete translation download."
360
+ });
361
+ const SimpleTranslationCompleteChapterSchema = import_common_types.SimpleTranslationBookChapterSchema.omit({ thisChapterWords: true }).extend({
362
+ /**
363
+ * The number of verses that the chapter contains.
364
+ */
365
+ numberOfVerses: import_zod.z.number().meta({
366
+ description: "The number of verses that the chapter contains."
367
+ }),
368
+ /**
369
+ * The link to the word-level annotations for the chapter.
370
+ * Omitted if the chapter doesn't have any word-level annotations.
371
+ */
372
+ thisChapterWordsLink: import_zod.z.string().optional().meta({
373
+ description: "The link to the word-level annotations for this chapter. Relative to the API origin. Omitted if the chapter doesn't have any word-level annotations."
374
+ })
375
+ }).meta({
376
+ id: "SimpleTranslationCompleteChapter",
377
+ description: "A chapter in the complete translation download, using the simplified chapter format."
378
+ });
242
379
  const ApiTranslationCompleteBookSchema = import_common_types.TranslationBookSchema.extend({
243
380
  /**
244
381
  * The number of chapters in the book.
@@ -255,13 +392,41 @@ const ApiTranslationCompleteBookSchema = import_common_types.TranslationBookSche
255
392
  /**
256
393
  * The complete list of chapters with all content.
257
394
  */
258
- chapters: import_zod.z.array(import_common_types.TranslationBookChapterSchema).meta({
395
+ chapters: import_zod.z.array(TranslationCompleteChapterSchema).meta({
259
396
  description: "The complete list of chapters with all content."
260
397
  })
261
398
  }).meta({
262
399
  id: "ApiTranslationCompleteBook",
263
400
  description: "A book in the complete translation download."
264
401
  });
402
+ const ApiSimpleTranslationCompleteSchema = import_zod.z.object({
403
+ /**
404
+ * The translation metadata.
405
+ */
406
+ translation: import_zod.z.lazy(() => ApiTranslationSchema).meta({
407
+ description: "The translation metadata."
408
+ }),
409
+ /**
410
+ * The complete list of books with all their chapters.
411
+ */
412
+ books: import_zod.z.array(import_zod.z.lazy(() => ApiSimpleTranslationCompleteBookSchema)).meta({
413
+ description: "The complete list of books with all their chapters."
414
+ })
415
+ }).meta({
416
+ id: "ApiSimpleTranslationComplete",
417
+ description: "Defines the complete translation download data, using the simplified chapter format. Maps to the /api/:translationId/complete.simple.json endpoint."
418
+ });
419
+ const ApiSimpleTranslationCompleteBookSchema = ApiTranslationCompleteBookSchema.extend({
420
+ /**
421
+ * The complete list of chapters with all content.
422
+ */
423
+ chapters: import_zod.z.array(SimpleTranslationCompleteChapterSchema).meta({
424
+ description: "The complete list of chapters with all content."
425
+ })
426
+ }).meta({
427
+ id: "ApiSimpleTranslationCompleteBook",
428
+ description: "A book in the complete translation download, using the simplified chapter format."
429
+ });
265
430
  const ApiCommentarySchema = import_common_types.CommentarySchema.extend({
266
431
  /**
267
432
  * The API link for the list of available books for this translation.
@@ -380,253 +545,976 @@ const ApiDatasetBooksSchema = import_zod.z.object({
380
545
  id: "ApiDatasetBooks",
381
546
  description: "Defines an interface that contains information about the books that are available for a dataset."
382
547
  });
383
- const ApiCommentaryProfilesSchema = import_zod.z.object({
548
+ const ApiDatasetPersonSummarySchema = import_zod.z.object({
384
549
  /**
385
- * The commentary information for the books.
550
+ * The ID of the person.
386
551
  */
387
- commentary: import_zod.z.lazy(() => ApiCommentarySchema).meta({
388
- description: "The commentary information for the profiles."
552
+ id: import_zod.z.string().meta({
553
+ description: "The ID of the person."
389
554
  }),
390
555
  /**
391
- * The list of profiles that are available for the commentary.
556
+ * The name of the person.
392
557
  */
393
- profiles: import_zod.z.array(import_zod.z.lazy(() => ApiCommentaryProfileSchema)).meta({
394
- description: "The list of profiles that are available for the commentary."
558
+ name: import_zod.z.string().meta({
559
+ description: "The name of the person."
560
+ }),
561
+ /**
562
+ * Whether the name of the person is a proper name.
563
+ */
564
+ isProperName: import_zod.z.boolean().optional().meta({
565
+ description: "Whether the name of the person is a proper name."
566
+ }),
567
+ /**
568
+ * The gender of the person.
569
+ */
570
+ gender: import_zod.z.string().optional().meta({
571
+ description: "The gender of the person."
572
+ }),
573
+ /**
574
+ * The number of Bible references that mention the person.
575
+ */
576
+ numberOfReferences: import_zod.z.number().meta({
577
+ description: "The number of Bible references that mention the person."
578
+ }),
579
+ /**
580
+ * The API link for the person.
581
+ */
582
+ thisPersonApiLink: import_zod.z.string().meta({
583
+ description: "The API link for the person. Relative to the API origin."
395
584
  })
396
585
  }).meta({
397
- id: "ApiCommentaryProfiles",
398
- description: "Defines an interface that contains information about the profiles that are available for a commentary."
586
+ id: "ApiDatasetPersonSummary",
587
+ description: "Defines a summary of a person in a dataset."
399
588
  });
400
- const ApiCommentaryProfileSchema = import_common_types.CommentaryProfileSchema.extend({
589
+ const ApiDatasetPeopleSchema = import_zod.z.object({
401
590
  /**
402
- * The link to this profile.
591
+ * The dataset information for the people.
403
592
  */
404
- thisProfileLink: import_zod.z.string().meta({
405
- description: "The API link for this profile. Relative to the API origin."
593
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
594
+ description: "The dataset information for the people."
406
595
  }),
407
596
  /**
408
- * The link to the chapter that this profile references in the commentary.
597
+ * The list of people that are available for the dataset.
409
598
  */
410
- referenceChapterLink: import_zod.z.string().nullable().meta({
411
- description: "The API link to the chapter that this profile references in the commentary. Relative to the API origin. Null if the profile doesn't reference a specific chapter."
599
+ people: import_zod.z.array(ApiDatasetPersonSummarySchema).meta({
600
+ description: "The list of people that are available for the dataset."
412
601
  })
413
602
  }).meta({
414
- id: "ApiCommentaryProfile",
415
- description: "Defines an interface that contains information about a profile."
603
+ id: "ApiDatasetPeople",
604
+ description: "The list of people in a dataset. Maps to the /api/d/:datasetId/people.json endpoint."
416
605
  });
417
- const ApiTranslationBookSchema = import_common_types.TranslationBookSchema.extend({
606
+ const ApiDatasetPersonSchema = import_zod.z.object({
418
607
  /**
419
- * The number of the first chapter in the book.
608
+ * The dataset information for the person.
420
609
  */
421
- firstChapterNumber: import_zod.z.number().meta({
422
- description: "The number of the first chapter in the book."
610
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
611
+ description: "The dataset information for the person."
423
612
  }),
424
613
  /**
425
- * The link to the first chapter of the book.
614
+ * The information about the person.
426
615
  */
427
- firstChapterApiLink: import_zod.z.string().meta({
428
- description: "The link to the first chapter of the book."
616
+ person: import_common_types.DatasetPersonSchema.meta({
617
+ description: "The information about the person."
429
618
  }),
430
619
  /**
431
- * The number of the last chapter in the book.
620
+ * The API link for this person.
432
621
  */
433
- lastChapterNumber: import_zod.z.number().meta({
434
- description: "The number of the last chapter in the book."
435
- }),
622
+ thisPersonApiLink: import_zod.z.string().meta({
623
+ description: "The API link for this person. Relative to the API origin."
624
+ })
625
+ }).meta({
626
+ id: "ApiDatasetPerson",
627
+ description: "The information about a person in a dataset. Maps to the /api/d/:datasetId/people/:personId.json endpoint."
628
+ });
629
+ const ApiDatasetPlaceSummarySchema = import_zod.z.object({
436
630
  /**
437
- * The link to the last chapter of the book.
631
+ * The ID of the place.
438
632
  */
439
- lastChapterApiLink: import_zod.z.string().meta({
440
- description: "The link to the last chapter of the book."
633
+ id: import_zod.z.string().meta({
634
+ description: "The ID of the place."
441
635
  }),
442
636
  /**
443
- * The number of chapters that the book contains.
637
+ * The name of the place.
444
638
  */
445
- numberOfChapters: import_zod.z.number().meta({
446
- description: "The number of chapters that the book contains."
639
+ name: import_zod.z.string().meta({
640
+ description: "The name of the place."
447
641
  }),
448
642
  /**
449
- * The number of verses that the book contains.
643
+ * The type of geographical feature that the place is.
450
644
  */
451
- totalNumberOfVerses: import_zod.z.number().meta({
452
- description: "The number of verses that the book contains."
453
- })
454
- }).meta({
455
- id: "ApiTranslationBook",
456
- description: "Defines a schema that contains information about a translation book."
457
- });
458
- const ApiCommentaryBookSchema = import_common_types.CommentaryBookSchema.extend({
645
+ featureType: import_zod.z.string().optional().meta({
646
+ description: 'The type of geographical feature that the place is. For example, "City", "Region", "Mountain", "Water", etc.'
647
+ }),
459
648
  /**
460
- * The number of the first chapter in the book.
461
- *
462
- * Null if the comentary book has no chapters.
649
+ * The latitude of the place.
463
650
  */
464
- firstChapterNumber: import_zod.z.number().nullable().meta({
465
- description: "The number of the first chapter in the book. Null if the comentary book has no chapters."
651
+ latitude: import_zod.z.number().optional().meta({
652
+ description: "The latitude of the place."
466
653
  }),
467
654
  /**
468
- * The link to the first chapter of the book.
469
- *
470
- * Null if the comentary book has no chapters.
655
+ * The longitude of the place.
471
656
  */
472
- firstChapterApiLink: import_zod.z.string().nullable().meta({
473
- description: "The link to the first chapter of the book. Null if the comentary book has no chapters."
657
+ longitude: import_zod.z.number().optional().meta({
658
+ description: "The longitude of the place."
474
659
  }),
475
660
  /**
476
- * The number of the last chapter in the book.
477
- *
478
- * Null if the comentary book has no chapters.
661
+ * The number of Bible references that mention the place.
479
662
  */
480
- lastChapterNumber: import_zod.z.number().nullable().meta({
481
- description: "The number of the last chapter in the book. Null if the comentary book has no chapters."
663
+ numberOfReferences: import_zod.z.number().meta({
664
+ description: "The number of Bible references that mention the place."
482
665
  }),
483
666
  /**
484
- * The link to the last chapter of the book.
485
- *
486
- * Null if the comentary book has no chapters.
667
+ * The API link for the place.
487
668
  */
488
- lastChapterApiLink: import_zod.z.string().nullable().meta({
489
- description: "The link to the last chapter of the book. Null if the comentary book has no chapters."
490
- }),
669
+ thisPlaceApiLink: import_zod.z.string().meta({
670
+ description: "The API link for the place. Relative to the API origin."
671
+ })
672
+ }).meta({
673
+ id: "ApiDatasetPlaceSummary",
674
+ description: "Defines a summary of a place in a dataset."
675
+ });
676
+ const ApiDatasetPlacesSchema = import_zod.z.object({
491
677
  /**
492
- * The number of chapters that the book contains.
678
+ * The dataset information for the places.
493
679
  */
494
- numberOfChapters: import_zod.z.number().meta({
495
- description: "The number of chapters that the book contains."
680
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
681
+ description: "The dataset information for the places."
496
682
  }),
497
683
  /**
498
- * The number of verses that the book contains.
684
+ * The list of places that are available for the dataset.
499
685
  */
500
- totalNumberOfVerses: import_zod.z.number().meta({
501
- description: "The number of verses that the book contains."
686
+ places: import_zod.z.array(ApiDatasetPlaceSummarySchema).meta({
687
+ description: "The list of places that are available for the dataset."
502
688
  })
503
689
  }).meta({
504
- id: "ApiCommentaryBook",
505
- description: "Defines a schema that contains information about a commentary book."
690
+ id: "ApiDatasetPlaces",
691
+ description: "The list of places in a dataset. Maps to the /api/d/:datasetId/places.json endpoint."
506
692
  });
507
- const ApiDatasetBookSchema = import_common_types.DatasetBookSchema.extend({
693
+ const ApiDatasetPlaceSchema = import_zod.z.object({
508
694
  /**
509
- * The number of the first chapter in the book.
695
+ * The dataset information for the place.
510
696
  */
511
- firstChapterNumber: import_zod.z.number().meta({
512
- description: "The number of the first chapter in the book."
697
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
698
+ description: "The dataset information for the place."
513
699
  }),
514
700
  /**
515
- * The link to the first chapter of the book.
701
+ * The information about the place.
516
702
  */
517
- firstChapterApiLink: import_zod.z.string().meta({
518
- description: "The link to the first chapter of the book."
703
+ place: import_common_types.DatasetPlaceSchema.meta({
704
+ description: "The information about the place."
519
705
  }),
520
706
  /**
521
- * The number of the last chapter in the book.
707
+ * The API link for this place.
522
708
  */
523
- lastChapterNumber: import_zod.z.number().meta({
524
- description: "The number of the last chapter in the book."
709
+ thisPlaceApiLink: import_zod.z.string().meta({
710
+ description: "The API link for this place. Relative to the API origin."
711
+ })
712
+ }).meta({
713
+ id: "ApiDatasetPlace",
714
+ description: "The information about a place in a dataset. Maps to the /api/d/:datasetId/places/:placeId.json endpoint."
715
+ });
716
+ const ApiDatasetEventSummarySchema = import_zod.z.object({
717
+ /**
718
+ * The ID of the event.
719
+ */
720
+ id: import_zod.z.string().meta({
721
+ description: "The ID of the event."
525
722
  }),
526
723
  /**
527
- * The link to the last chapter of the book.
724
+ * The name of the event.
528
725
  */
529
- lastChapterApiLink: import_zod.z.string().meta({
530
- description: "The link to the last chapter of the book."
726
+ name: import_zod.z.string().meta({
727
+ description: "The name of the event."
531
728
  }),
532
729
  /**
533
- * The number of chapters that the book contains.
730
+ * The date that the event started at.
534
731
  */
535
- numberOfChapters: import_zod.z.number().meta({
536
- description: "The number of chapters that the book contains."
732
+ startDate: import_zod.z.string().optional().meta({
733
+ description: "The date that the event started at. Negative numbers are years BC. Positive numbers are years AD. More specific dates use the `YYYY-MM-DD` format."
537
734
  }),
538
735
  /**
539
- * The number of verses that the book contains.
736
+ * The number of Bible references that describe the event.
540
737
  */
541
- totalNumberOfVerses: import_zod.z.number().meta({
542
- description: "The number of verses that the book contains."
738
+ numberOfReferences: import_zod.z.number().meta({
739
+ description: "The number of Bible references that describe the event."
543
740
  }),
544
741
  /**
545
- * The number of references that the book contains.
742
+ * The API link for the event.
546
743
  */
547
- totalNumberOfReferences: import_zod.z.number().meta({
548
- description: "The number of references that the book contains."
744
+ thisEventApiLink: import_zod.z.string().meta({
745
+ description: "The API link for the event. Relative to the API origin."
549
746
  })
550
747
  }).meta({
551
- id: "ApiDatasetBook",
552
- description: "Defines a schema that contains information about a book in a dataset."
748
+ id: "ApiDatasetEventSummary",
749
+ description: "Defines a summary of an event in a dataset."
553
750
  });
554
- const ApiTranslationBookChapterSchema = import_common_types.TranslationBookChapterSchema.extend({
751
+ const ApiDatasetEventsSchema = import_zod.z.object({
555
752
  /**
556
- * The translation information for the book chapter.
753
+ * The dataset information for the events.
557
754
  */
558
- translation: import_zod.z.lazy(() => ApiTranslationSchema).meta({
559
- description: "The translation information for the book chapter."
755
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
756
+ description: "The dataset information for the events."
560
757
  }),
561
758
  /**
562
- * The book information for the book chapter.
759
+ * The list of events that are available for the dataset.
563
760
  */
564
- book: import_zod.z.lazy(() => ApiTranslationBookSchema).meta({
565
- description: "The book information for the book chapter."
566
- }),
761
+ events: import_zod.z.array(ApiDatasetEventSummarySchema).meta({
762
+ description: "The list of events that are available for the dataset."
763
+ })
764
+ }).meta({
765
+ id: "ApiDatasetEvents",
766
+ description: "The list of events in a dataset. Maps to the /api/d/:datasetId/events.json endpoint."
767
+ });
768
+ const ApiDatasetEventSchema = import_zod.z.object({
567
769
  /**
568
- * The link to this chapter.
770
+ * The dataset information for the event.
569
771
  */
570
- thisChapterLink: import_zod.z.string().meta({
571
- description: "The API link for this chapter. Relative to the API origin."
772
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
773
+ description: "The dataset information for the event."
572
774
  }),
573
775
  /**
574
- * The link to the next chapter.
575
- * Null if this is the last chapter in the translation.
776
+ * The information about the event.
576
777
  */
577
- nextChapterApiLink: import_zod.z.string().nullable().meta({
578
- description: "The API link to the next chapter. Relative to the API origin. Null if this is the last chapter in the translation."
778
+ event: import_common_types.DatasetEventSchema.meta({
779
+ description: "The information about the event."
579
780
  }),
580
781
  /**
581
- * The links to the audio versions for the next chapter.
582
- * Null if this is the last chapter in the translation.
782
+ * The API link for this event.
583
783
  */
584
- nextChapterAudioLinks: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
585
- description: "The links to the audio versions for the next chapter. Relative to the API origin. Null if this is the last chapter in the translation."
784
+ thisEventApiLink: import_zod.z.string().meta({
785
+ description: "The API link for this event. Relative to the API origin."
786
+ })
787
+ }).meta({
788
+ id: "ApiDatasetEvent",
789
+ description: "The information about an event in a dataset. Maps to the /api/d/:datasetId/events/:eventId.json endpoint."
790
+ });
791
+ const ApiDatasetPeopleGroupSummarySchema = import_zod.z.object({
792
+ /**
793
+ * The ID of the people group.
794
+ */
795
+ id: import_zod.z.string().meta({
796
+ description: "The ID of the people group."
586
797
  }),
587
798
  /**
588
- * The link to the previous chapter.
589
- * Null if this is the first chapter in the translation.
799
+ * The name of the people group.
590
800
  */
591
- previousChapterApiLink: import_zod.z.string().nullable().meta({
592
- description: "The API link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the translation."
801
+ name: import_zod.z.string().meta({
802
+ description: "The name of the people group."
593
803
  }),
594
804
  /**
595
- * The links to the audio versions for the previous chapter.
596
- * Null if this is the first chapter in the translation.
805
+ * The number of people that are members of the people group.
597
806
  */
598
- previousChapterAudioLinks: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
599
- description: "The links to the audio versions for the previous chapter. Relative to the API origin. Null if this is the first chapter in the translation."
807
+ numberOfMembers: import_zod.z.number().meta({
808
+ description: "The number of people that are members of the people group."
600
809
  }),
601
810
  /**
602
- * The number of verses that the chapter contains.
811
+ * The API link for the people group.
603
812
  */
604
- numberOfVerses: import_zod.z.number().meta({
605
- description: "The number of verses that the chapter contains."
813
+ thisPeopleGroupApiLink: import_zod.z.string().meta({
814
+ description: "The API link for the people group. Relative to the API origin."
606
815
  })
607
816
  }).meta({
608
- id: "ApiTranslationBookChapter",
609
- description: "Defines an interface that contains information about a book chapter in a translation."
817
+ id: "ApiDatasetPeopleGroupSummary",
818
+ description: "Defines a summary of a people group in a dataset."
610
819
  });
611
- const ApiCommentaryBookChapterSchema = import_common_types.CommentaryBookChapterSchema.extend({
820
+ const ApiDatasetPeopleGroupsSchema = import_zod.z.object({
612
821
  /**
613
- * The commentary information for the book chapter.
822
+ * The dataset information for the people groups.
614
823
  */
615
- commentary: import_zod.z.lazy(() => ApiCommentarySchema).meta({
616
- description: "The commentary information for the book chapter."
824
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
825
+ description: "The dataset information for the people groups."
617
826
  }),
618
827
  /**
619
- * The book information for the book chapter.
828
+ * The list of people groups that are available for the dataset.
620
829
  */
621
- book: import_zod.z.lazy(() => ApiCommentaryBookSchema).meta({
622
- description: "The book information for the book chapter."
623
- }),
830
+ groups: import_zod.z.array(ApiDatasetPeopleGroupSummarySchema).meta({
831
+ description: "The list of people groups that are available for the dataset."
832
+ })
833
+ }).meta({
834
+ id: "ApiDatasetPeopleGroups",
835
+ description: "The list of people groups in a dataset. Maps to the /api/d/:datasetId/groups.json endpoint."
836
+ });
837
+ const ApiDatasetPeopleGroupSchema = import_zod.z.object({
624
838
  /**
625
- * The link to this chapter.
839
+ * The dataset information for the people group.
626
840
  */
627
- thisChapterLink: import_zod.z.string().meta({
628
- description: "The API link for this chapter. Relative to the API origin."
841
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
842
+ description: "The dataset information for the people group."
629
843
  }),
844
+ /**
845
+ * The information about the people group.
846
+ */
847
+ group: import_common_types.DatasetPeopleGroupSchema.meta({
848
+ description: "The information about the people group."
849
+ }),
850
+ /**
851
+ * The API link for this people group.
852
+ */
853
+ thisPeopleGroupApiLink: import_zod.z.string().meta({
854
+ description: "The API link for this people group. Relative to the API origin."
855
+ })
856
+ }).meta({
857
+ id: "ApiDatasetPeopleGroup",
858
+ description: "The information about a people group in a dataset. Maps to the /api/d/:datasetId/groups/:groupId.json endpoint."
859
+ });
860
+ const ApiDatasetChapterPersonSchema = import_zod.z.object({
861
+ /**
862
+ * The ID of the person.
863
+ */
864
+ id: import_zod.z.string().meta({
865
+ description: "The ID of the person."
866
+ }),
867
+ /**
868
+ * The name of the person.
869
+ */
870
+ name: import_zod.z.string().meta({
871
+ description: "The name of the person."
872
+ }),
873
+ /**
874
+ * Whether the name of the person is a proper name.
875
+ */
876
+ isProperName: import_zod.z.boolean().optional().meta({
877
+ description: "Whether the name of the person is a proper name."
878
+ }),
879
+ /**
880
+ * The gender of the person.
881
+ */
882
+ gender: import_zod.z.string().optional().meta({
883
+ description: "The gender of the person."
884
+ }),
885
+ /**
886
+ * The year that the person was born.
887
+ * Negative numbers are years BC. Positive numbers are years AD.
888
+ */
889
+ birthYear: import_zod.z.number().optional().meta({
890
+ description: "The year that the person was born. Negative numbers are years BC. Positive numbers are years AD."
891
+ }),
892
+ /**
893
+ * The year that the person died.
894
+ * Negative numbers are years BC. Positive numbers are years AD.
895
+ */
896
+ deathYear: import_zod.z.number().optional().meta({
897
+ description: "The year that the person died. Negative numbers are years BC. Positive numbers are years AD."
898
+ }),
899
+ /**
900
+ * The API link for the person.
901
+ */
902
+ apiLink: import_zod.z.string().meta({
903
+ description: "The API link for the person. Relative to the API origin."
904
+ }),
905
+ /**
906
+ * The numbers of the verses in the chapter that mention the person.
907
+ * Sorted in ascending order.
908
+ */
909
+ verses: import_zod.z.array(import_zod.z.number()).meta({
910
+ description: "The numbers of the verses in the chapter that mention the person. Sorted in ascending order."
911
+ })
912
+ }).meta({
913
+ id: "ApiDatasetChapterPerson",
914
+ description: "Defines a person that appears in a chapter of a dataset."
915
+ });
916
+ const ApiDatasetChapterPlaceSchema = import_zod.z.object({
917
+ /**
918
+ * The ID of the place.
919
+ */
920
+ id: import_zod.z.string().meta({
921
+ description: "The ID of the place."
922
+ }),
923
+ /**
924
+ * The name of the place.
925
+ */
926
+ name: import_zod.z.string().meta({
927
+ description: "The name of the place."
928
+ }),
929
+ /**
930
+ * The type of geographical feature that the place is.
931
+ */
932
+ featureType: import_zod.z.string().optional().meta({
933
+ description: 'The type of geographical feature that the place is. For example, "City", "Region", "Mountain", "Water", etc.'
934
+ }),
935
+ /**
936
+ * The latitude of the place.
937
+ */
938
+ latitude: import_zod.z.number().optional().meta({
939
+ description: "The latitude of the place."
940
+ }),
941
+ /**
942
+ * The longitude of the place.
943
+ */
944
+ longitude: import_zod.z.number().optional().meta({
945
+ description: "The longitude of the place."
946
+ }),
947
+ /**
948
+ * The API link for the place.
949
+ */
950
+ apiLink: import_zod.z.string().meta({
951
+ description: "The API link for the place. Relative to the API origin."
952
+ }),
953
+ /**
954
+ * The numbers of the verses in the chapter that mention the place.
955
+ * Sorted in ascending order.
956
+ */
957
+ verses: import_zod.z.array(import_zod.z.number()).meta({
958
+ description: "The numbers of the verses in the chapter that mention the place. Sorted in ascending order."
959
+ })
960
+ }).meta({
961
+ id: "ApiDatasetChapterPlace",
962
+ description: "Defines a place that appears in a chapter of a dataset."
963
+ });
964
+ const ApiDatasetChapterEventSchema = import_zod.z.object({
965
+ /**
966
+ * The ID of the event.
967
+ */
968
+ id: import_zod.z.string().meta({
969
+ description: "The ID of the event."
970
+ }),
971
+ /**
972
+ * The name of the event.
973
+ */
974
+ name: import_zod.z.string().meta({
975
+ description: "The name of the event."
976
+ }),
977
+ /**
978
+ * The date that the event started at.
979
+ */
980
+ startDate: import_zod.z.string().optional().meta({
981
+ description: "The date that the event started at. Negative numbers are years BC. Positive numbers are years AD. More specific dates use the `YYYY-MM-DD` format."
982
+ }),
983
+ /**
984
+ * The API link for the event.
985
+ */
986
+ apiLink: import_zod.z.string().meta({
987
+ description: "The API link for the event. Relative to the API origin."
988
+ }),
989
+ /**
990
+ * The numbers of the verses in the chapter that describe the event.
991
+ * Sorted in ascending order.
992
+ */
993
+ verses: import_zod.z.array(import_zod.z.number()).meta({
994
+ description: "The numbers of the verses in the chapter that describe the event. Sorted in ascending order."
995
+ })
996
+ }).meta({
997
+ id: "ApiDatasetChapterEvent",
998
+ description: "Defines an event that appears in a chapter of a dataset."
999
+ });
1000
+ const ApiDatasetEntityChapterDataSchema = import_zod.z.object({
1001
+ /**
1002
+ * The number of the chapter.
1003
+ */
1004
+ number: import_zod.z.number().meta({
1005
+ description: "The number of the chapter."
1006
+ }),
1007
+ /**
1008
+ * The people that appear in the chapter.
1009
+ * Sorted by the first verse that they appear in.
1010
+ */
1011
+ people: import_zod.z.array(ApiDatasetChapterPersonSchema).meta({
1012
+ description: "The people that appear in the chapter. Sorted by the first verse that they appear in."
1013
+ }),
1014
+ /**
1015
+ * The places that appear in the chapter.
1016
+ * Sorted by the first verse that they appear in.
1017
+ */
1018
+ places: import_zod.z.array(ApiDatasetChapterPlaceSchema).meta({
1019
+ description: "The places that appear in the chapter. Sorted by the first verse that they appear in."
1020
+ }),
1021
+ /**
1022
+ * The events that appear in the chapter.
1023
+ * Sorted by the first verse that they appear in.
1024
+ */
1025
+ events: import_zod.z.array(ApiDatasetChapterEventSchema).meta({
1026
+ description: "The events that appear in the chapter. Sorted by the first verse that they appear in."
1027
+ })
1028
+ }).meta({
1029
+ id: "ApiDatasetEntityChapterData",
1030
+ description: "Defines the entity data for a chapter in a dataset. Contains the people, places, and events that appear in the chapter."
1031
+ });
1032
+ const ApiDatasetEntityBookChapterSchema = import_zod.z.object({
1033
+ /**
1034
+ * The dataset information for the book chapter.
1035
+ */
1036
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
1037
+ description: "The dataset information for the book chapter."
1038
+ }),
1039
+ /**
1040
+ * The book information for the book chapter.
1041
+ */
1042
+ book: import_zod.z.lazy(() => ApiDatasetBookSchema).meta({
1043
+ description: "The book information for the book chapter."
1044
+ }),
1045
+ /**
1046
+ * The entity data for the chapter.
1047
+ */
1048
+ chapter: ApiDatasetEntityChapterDataSchema.meta({
1049
+ description: "The entity data for the chapter."
1050
+ }),
1051
+ /**
1052
+ * The link to this chapter.
1053
+ */
1054
+ thisChapterLink: import_zod.z.string().meta({
1055
+ description: "The link to this chapter. Relative to the API origin."
1056
+ }),
1057
+ /**
1058
+ * The reference for this chapter.
1059
+ */
1060
+ thisChapterReference: import_zod.z.lazy(() => DatasetChapterReferenceSchema).meta({
1061
+ description: "The reference for this chapter."
1062
+ }),
1063
+ /**
1064
+ * The link to the next chapter.
1065
+ * Null if this is the last chapter in the dataset.
1066
+ */
1067
+ nextChapterApiLink: import_zod.z.string().nullable().meta({
1068
+ description: "The link to the next chapter. Relative to the API origin. Null if this is the last chapter in the dataset."
1069
+ }),
1070
+ /**
1071
+ * The reference for the next chapter.
1072
+ * Null if this is the last chapter in the dataset.
1073
+ */
1074
+ nextChapterReference: import_zod.z.lazy(() => DatasetChapterReferenceSchema).nullable().meta({
1075
+ description: "The reference for the next chapter. Null if this is the last chapter in the dataset."
1076
+ }),
1077
+ /**
1078
+ * The link to the previous chapter.
1079
+ * Null if this is the first chapter in the dataset.
1080
+ */
1081
+ previousChapterApiLink: import_zod.z.string().nullable().meta({
1082
+ description: "The link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the dataset."
1083
+ }),
1084
+ /**
1085
+ * The reference for the previous chapter.
1086
+ * Null if this is the first chapter in the dataset.
1087
+ */
1088
+ previousChapterReference: import_zod.z.lazy(() => DatasetChapterReferenceSchema).nullable().meta({
1089
+ description: "The reference for the previous chapter. Null if this is the first chapter in the dataset."
1090
+ }),
1091
+ /**
1092
+ * The number of people that appear in the chapter.
1093
+ */
1094
+ numberOfPeople: import_zod.z.number().meta({
1095
+ description: "The number of people that appear in the chapter."
1096
+ }),
1097
+ /**
1098
+ * The number of places that appear in the chapter.
1099
+ */
1100
+ numberOfPlaces: import_zod.z.number().meta({
1101
+ description: "The number of places that appear in the chapter."
1102
+ }),
1103
+ /**
1104
+ * The number of events that appear in the chapter.
1105
+ */
1106
+ numberOfEvents: import_zod.z.number().meta({
1107
+ description: "The number of events that appear in the chapter."
1108
+ })
1109
+ }).meta({
1110
+ id: "ApiDatasetEntityBookChapter",
1111
+ description: "The entities (people, places, and events) that appear in a chapter of a book for a dataset. Maps to the /api/d/:datasetId/:bookId/:chapterNumber.json endpoint for datasets that contain entities."
1112
+ });
1113
+ const ApiCommentaryProfilesSchema = import_zod.z.object({
1114
+ /**
1115
+ * The commentary information for the books.
1116
+ */
1117
+ commentary: import_zod.z.lazy(() => ApiCommentarySchema).meta({
1118
+ description: "The commentary information for the profiles."
1119
+ }),
1120
+ /**
1121
+ * The list of profiles that are available for the commentary.
1122
+ */
1123
+ profiles: import_zod.z.array(import_zod.z.lazy(() => ApiCommentaryProfileSchema)).meta({
1124
+ description: "The list of profiles that are available for the commentary."
1125
+ })
1126
+ }).meta({
1127
+ id: "ApiCommentaryProfiles",
1128
+ description: "Defines an interface that contains information about the profiles that are available for a commentary."
1129
+ });
1130
+ const ApiCommentaryProfileSchema = import_common_types.CommentaryProfileSchema.extend({
1131
+ /**
1132
+ * The link to this profile.
1133
+ */
1134
+ thisProfileLink: import_zod.z.string().meta({
1135
+ description: "The API link for this profile. Relative to the API origin."
1136
+ }),
1137
+ /**
1138
+ * The link to the chapter that this profile references in the commentary.
1139
+ */
1140
+ referenceChapterLink: import_zod.z.string().nullable().meta({
1141
+ description: "The API link to the chapter that this profile references in the commentary. Relative to the API origin. Null if the profile doesn't reference a specific chapter."
1142
+ })
1143
+ }).meta({
1144
+ id: "ApiCommentaryProfile",
1145
+ description: "Defines an interface that contains information about a profile."
1146
+ });
1147
+ const TranslationChapterReferenceSchema = import_zod.z.object({
1148
+ translationId: import_zod.z.string().meta({
1149
+ description: "The ID of the translation that the chapter reference is for."
1150
+ }),
1151
+ book: import_utils.BookIdSchema,
1152
+ chapter: import_zod.z.int().positive().meta({
1153
+ description: "The chapter number of the chapter reference."
1154
+ })
1155
+ }).meta({
1156
+ id: "TranslationChapterReference",
1157
+ description: "Defines a reference to a chapter in a translation."
1158
+ });
1159
+ const CommentaryChapterReferenceSchema = import_zod.z.object({
1160
+ commentaryId: import_zod.z.string().meta({
1161
+ description: "The ID of the commentary that the chapter reference is for."
1162
+ }),
1163
+ book: import_utils.BookIdSchema,
1164
+ chapter: import_zod.z.int().positive().meta({
1165
+ description: "The chapter number of the chapter reference."
1166
+ })
1167
+ }).meta({
1168
+ id: "CommentaryChapterReference",
1169
+ description: "Defines a reference to a chapter in a commentary."
1170
+ });
1171
+ const DatasetChapterReferenceSchema = import_zod.z.object({
1172
+ datasetId: import_zod.z.string().meta({
1173
+ description: "The ID of the dataset that the chapter reference is for."
1174
+ }),
1175
+ book: import_utils.BookIdSchema,
1176
+ chapter: import_zod.z.int().positive().meta({
1177
+ description: "The chapter number of the chapter reference."
1178
+ })
1179
+ }).meta({
1180
+ id: "DatasetChapterReference",
1181
+ description: "Defines a reference to a chapter in a dataset."
1182
+ });
1183
+ const ApiTranslationBookSchema = import_common_types.TranslationBookSchema.extend({
1184
+ /**
1185
+ * The number of the first chapter in the book.
1186
+ */
1187
+ firstChapterNumber: import_zod.z.number().meta({
1188
+ description: "The number of the first chapter in the book."
1189
+ }),
1190
+ /**
1191
+ * The link to the first chapter of the book.
1192
+ */
1193
+ firstChapterApiLink: import_zod.z.string().meta({
1194
+ description: "The link to the first chapter of the book."
1195
+ }),
1196
+ /**
1197
+ * The reference for the first chapter in the book.
1198
+ */
1199
+ firstChapterReference: TranslationChapterReferenceSchema,
1200
+ /**
1201
+ * The number of the last chapter in the book.
1202
+ */
1203
+ lastChapterNumber: import_zod.z.number().meta({
1204
+ description: "The number of the last chapter in the book."
1205
+ }),
1206
+ /**
1207
+ * The link to the last chapter of the book.
1208
+ */
1209
+ lastChapterApiLink: import_zod.z.string().meta({
1210
+ description: "The link to the last chapter of the book."
1211
+ }),
1212
+ /**
1213
+ * The reference for the last chapter in the book.
1214
+ */
1215
+ lastChapterReference: TranslationChapterReferenceSchema,
1216
+ /**
1217
+ * The number of chapters that the book contains.
1218
+ */
1219
+ numberOfChapters: import_zod.z.number().meta({
1220
+ description: "The number of chapters that the book contains."
1221
+ }),
1222
+ /**
1223
+ * The number of verses that the book contains.
1224
+ */
1225
+ totalNumberOfVerses: import_zod.z.number().meta({
1226
+ description: "The number of verses that the book contains."
1227
+ })
1228
+ }).meta({
1229
+ id: "ApiTranslationBook",
1230
+ description: "Defines a schema that contains information about a translation book."
1231
+ });
1232
+ const ApiCommentaryBookSchema = import_common_types.CommentaryBookSchema.extend({
1233
+ /**
1234
+ * The number of the first chapter in the book.
1235
+ *
1236
+ * Null if the comentary book has no chapters.
1237
+ */
1238
+ firstChapterNumber: import_zod.z.number().nullable().meta({
1239
+ description: "The number of the first chapter in the book. Null if the comentary book has no chapters."
1240
+ }),
1241
+ /**
1242
+ * The link to the first chapter of the book.
1243
+ *
1244
+ * Null if the comentary book has no chapters.
1245
+ */
1246
+ firstChapterApiLink: import_zod.z.string().nullable().meta({
1247
+ description: "The link to the first chapter of the book. Null if the comentary book has no chapters."
1248
+ }),
1249
+ /**
1250
+ * The reference for the first chapter in the book.
1251
+ */
1252
+ firstChapterReference: CommentaryChapterReferenceSchema.nullable().meta({
1253
+ description: "The reference for the first chapter in the book. Null if the comentary book has no chapters."
1254
+ }),
1255
+ /**
1256
+ * The number of the last chapter in the book.
1257
+ *
1258
+ * Null if the comentary book has no chapters.
1259
+ */
1260
+ lastChapterNumber: import_zod.z.number().nullable().meta({
1261
+ description: "The number of the last chapter in the book. Null if the comentary book has no chapters."
1262
+ }),
1263
+ /**
1264
+ * The link to the last chapter of the book.
1265
+ *
1266
+ * Null if the comentary book has no chapters.
1267
+ */
1268
+ lastChapterApiLink: import_zod.z.string().nullable().meta({
1269
+ description: "The link to the last chapter of the book. Null if the comentary book has no chapters."
1270
+ }),
1271
+ /**
1272
+ * The reference for the last chapter in the book.
1273
+ */
1274
+ lastChapterReference: CommentaryChapterReferenceSchema.nullable().meta({
1275
+ description: "The reference for the last chapter in the book. Null if the comentary book has no chapters."
1276
+ }),
1277
+ /**
1278
+ * The number of chapters that the book contains.
1279
+ */
1280
+ numberOfChapters: import_zod.z.number().meta({
1281
+ description: "The number of chapters that the book contains."
1282
+ }),
1283
+ /**
1284
+ * The number of verses that the book contains.
1285
+ */
1286
+ totalNumberOfVerses: import_zod.z.number().meta({
1287
+ description: "The number of verses that the book contains."
1288
+ })
1289
+ }).meta({
1290
+ id: "ApiCommentaryBook",
1291
+ description: "Defines a schema that contains information about a commentary book."
1292
+ });
1293
+ const ApiDatasetBookSchema = import_common_types.DatasetBookSchema.extend({
1294
+ /**
1295
+ * The number of the first chapter in the book.
1296
+ */
1297
+ firstChapterNumber: import_zod.z.number().meta({
1298
+ description: "The number of the first chapter in the book."
1299
+ }),
1300
+ /**
1301
+ * The link to the first chapter of the book.
1302
+ */
1303
+ firstChapterApiLink: import_zod.z.string().meta({
1304
+ description: "The link to the first chapter of the book."
1305
+ }),
1306
+ /**
1307
+ * The reference for the first chapter in the book.
1308
+ */
1309
+ firstChapterReference: DatasetChapterReferenceSchema,
1310
+ /**
1311
+ * The number of the last chapter in the book.
1312
+ */
1313
+ lastChapterNumber: import_zod.z.number().meta({
1314
+ description: "The number of the last chapter in the book."
1315
+ }),
1316
+ /**
1317
+ * The link to the last chapter of the book.
1318
+ */
1319
+ lastChapterApiLink: import_zod.z.string().meta({
1320
+ description: "The link to the last chapter of the book."
1321
+ }),
1322
+ /**
1323
+ * The reference for the last chapter in the book.
1324
+ */
1325
+ lastChapterReference: DatasetChapterReferenceSchema,
1326
+ /**
1327
+ * The number of chapters that the book contains.
1328
+ */
1329
+ numberOfChapters: import_zod.z.number().meta({
1330
+ description: "The number of chapters that the book contains."
1331
+ }),
1332
+ /**
1333
+ * The number of verses that the book contains.
1334
+ */
1335
+ totalNumberOfVerses: import_zod.z.number().meta({
1336
+ description: "The number of verses that the book contains."
1337
+ }),
1338
+ /**
1339
+ * The number of references that the book contains.
1340
+ */
1341
+ totalNumberOfReferences: import_zod.z.number().meta({
1342
+ description: "The number of references that the book contains."
1343
+ })
1344
+ }).meta({
1345
+ id: "ApiDatasetBook",
1346
+ description: "Defines a schema that contains information about a book in a dataset."
1347
+ });
1348
+ const ApiTranslationBookChapterBaseSchema = import_common_types.TranslationBookChapterSchema.omit({
1349
+ thisChapterWords: true
1350
+ });
1351
+ const ApiTranslationBookChapterSchema = ApiTranslationBookChapterBaseSchema.extend({
1352
+ /**
1353
+ * The translation information for the book chapter.
1354
+ */
1355
+ translation: import_zod.z.lazy(() => ApiTranslationSchema).meta({
1356
+ description: "The translation information for the book chapter."
1357
+ }),
1358
+ /**
1359
+ * The book information for the book chapter.
1360
+ */
1361
+ book: import_zod.z.lazy(() => ApiTranslationBookSchema).meta({
1362
+ description: "The book information for the book chapter."
1363
+ }),
1364
+ /**
1365
+ * The link to this chapter.
1366
+ */
1367
+ thisChapterLink: import_zod.z.string().meta({
1368
+ description: "The API link for this chapter. Relative to the API origin."
1369
+ }),
1370
+ /**
1371
+ * The reference for this chapter.
1372
+ */
1373
+ thisChapterReference: TranslationChapterReferenceSchema,
1374
+ /**
1375
+ * The link to the next chapter.
1376
+ * Null if this is the last chapter in the translation.
1377
+ */
1378
+ nextChapterApiLink: import_zod.z.string().nullable().meta({
1379
+ description: "The API link to the next chapter. Relative to the API origin. Null if this is the last chapter in the translation."
1380
+ }),
1381
+ /**
1382
+ * The reference for the next chapter.
1383
+ * Null if this is the last chapter in the translation.
1384
+ */
1385
+ nextChapterReference: TranslationChapterReferenceSchema.nullable().meta(
1386
+ {
1387
+ description: "The reference for the next chapter. Null if this is the last chapter in the translation."
1388
+ }
1389
+ ),
1390
+ /**
1391
+ * The links to the audio versions for the next chapter.
1392
+ * Null if this is the last chapter in the translation.
1393
+ */
1394
+ nextChapterAudioLinks: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
1395
+ description: "The links to the audio versions for the next chapter. Relative to the API origin. Null if this is the last chapter in the translation."
1396
+ }),
1397
+ /**
1398
+ * The links to the audio timings for different audio versions for the chapter.
1399
+ */
1400
+ thisChapterAudioTimings: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).meta({
1401
+ description: "The links to the audio timings for different audio versions for the chapter. Relative to the API origin."
1402
+ }),
1403
+ /**
1404
+ * The links to the audio timings for different audio versions for the next chapter.
1405
+ * Null if this is the last chapter in the translation.
1406
+ */
1407
+ nextChapterAudioTimings: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
1408
+ description: "The links to the audio timings for different audio versions for the next chapter. Relative to the API origin. Null if this is the last chapter in the translation."
1409
+ }),
1410
+ /**
1411
+ * The links to the audio timings for different audio versions for the previous chapter.
1412
+ * Null if this is the first chapter in the translation.
1413
+ */
1414
+ previousChapterAudioTimings: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
1415
+ description: "The links to the audio timings for different audio versions for the previous chapter. Relative to the API origin. Null if this is the first chapter in the translation."
1416
+ }),
1417
+ /**
1418
+ * The link to the previous chapter.
1419
+ * Null if this is the first chapter in the translation.
1420
+ */
1421
+ previousChapterApiLink: import_zod.z.string().nullable().meta({
1422
+ description: "The API link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the translation."
1423
+ }),
1424
+ /**
1425
+ * The reference for the previous chapter.
1426
+ * Null if this is the first chapter in the translation.
1427
+ */
1428
+ previousChapterReference: TranslationChapterReferenceSchema.nullable().meta({
1429
+ description: "The reference for the previous chapter. Null if this is the first chapter in the translation."
1430
+ }),
1431
+ /**
1432
+ * The links to the audio versions for the previous chapter.
1433
+ * Null if this is the first chapter in the translation.
1434
+ */
1435
+ previousChapterAudioLinks: import_zod.z.record(import_zod.z.string(), import_zod.z.string()).nullable().meta({
1436
+ description: "The links to the audio versions for the previous chapter. Relative to the API origin. Null if this is the first chapter in the translation."
1437
+ }),
1438
+ /**
1439
+ * The link to the word-level annotations for the chapter.
1440
+ * Omitted if the chapter doesn't have any word-level annotations.
1441
+ */
1442
+ thisChapterWordsLink: import_zod.z.string().optional().meta({
1443
+ description: "The link to the word-level annotations for this chapter. Relative to the API origin. Omitted if the chapter doesn't have any word-level annotations."
1444
+ }),
1445
+ /**
1446
+ * The link to the word-level annotations for the next chapter.
1447
+ * Omitted if this is the last chapter in the translation, or if the next
1448
+ * chapter doesn't have any word-level annotations.
1449
+ */
1450
+ nextChapterWordsLink: import_zod.z.string().optional().meta({
1451
+ description: "The link to the word-level annotations for the next chapter. Relative to the API origin. Omitted if this is the last chapter in the translation, or if the next chapter doesn't have any word-level annotations."
1452
+ }),
1453
+ /**
1454
+ * The link to the word-level annotations for the previous chapter.
1455
+ * Omitted if this is the first chapter in the translation, or if the
1456
+ * previous chapter doesn't have any word-level annotations.
1457
+ */
1458
+ previousChapterWordsLink: import_zod.z.string().optional().meta({
1459
+ description: "The link to the word-level annotations for the previous chapter. Relative to the API origin. Omitted if this is the first chapter in the translation, or if the previous chapter doesn't have any word-level annotations."
1460
+ }),
1461
+ /**
1462
+ * The number of verses that the chapter contains.
1463
+ */
1464
+ numberOfVerses: import_zod.z.number().meta({
1465
+ description: "The number of verses that the chapter contains."
1466
+ }),
1467
+ /**
1468
+ * The link to the simplified version of this chapter.
1469
+ * Omitted if simplified chapters were not generated.
1470
+ */
1471
+ simpleChapterApiLink: import_zod.z.string().optional().meta({
1472
+ description: "The API link to the simplified version of this chapter. Relative to the API origin. Omitted if simplified chapters are not available."
1473
+ })
1474
+ }).meta({
1475
+ id: "ApiTranslationBookChapter",
1476
+ description: "Defines an interface that contains information about a book chapter in a translation."
1477
+ });
1478
+ const ApiSimpleTranslationBookChapterSchema = ApiTranslationBookChapterSchema.omit({
1479
+ chapter: true,
1480
+ simpleChapterApiLink: true
1481
+ }).extend({
1482
+ /**
1483
+ * The simplified information for the chapter.
1484
+ */
1485
+ chapter: import_zod.z.lazy(() => import_common_types.SimpleChapterDataSchema).meta({
1486
+ description: "The simplified information for the chapter. Each verse contains a single text string, and the footnotes and formatting are represented by offsets into that string."
1487
+ }),
1488
+ /**
1489
+ * The link to the regular version of this chapter.
1490
+ */
1491
+ fullChapterApiLink: import_zod.z.string().meta({
1492
+ description: "The API link to the regular (non-simplified) version of this chapter. Relative to the API origin."
1493
+ })
1494
+ }).meta({
1495
+ id: "ApiSimpleTranslationBookChapter",
1496
+ description: "Defines an interface that contains information about a book chapter in a translation, using the simplified chapter format."
1497
+ });
1498
+ const ApiCommentaryBookChapterSchema = import_common_types.CommentaryBookChapterSchema.extend({
1499
+ /**
1500
+ * The commentary information for the book chapter.
1501
+ */
1502
+ commentary: import_zod.z.lazy(() => ApiCommentarySchema).meta({
1503
+ description: "The commentary information for the book chapter."
1504
+ }),
1505
+ /**
1506
+ * The book information for the book chapter.
1507
+ */
1508
+ book: import_zod.z.lazy(() => ApiCommentaryBookSchema).meta({
1509
+ description: "The book information for the book chapter."
1510
+ }),
1511
+ /**
1512
+ * The link to this chapter.
1513
+ */
1514
+ thisChapterLink: import_zod.z.string().meta({
1515
+ description: "The API link for this chapter. Relative to the API origin."
1516
+ }),
1517
+ thisChapterReference: CommentaryChapterReferenceSchema,
630
1518
  /**
631
1519
  * The link to the next chapter.
632
1520
  * Null if this is the last chapter in the translation.
@@ -634,6 +1522,9 @@ const ApiCommentaryBookChapterSchema = import_common_types.CommentaryBookChapter
634
1522
  nextChapterApiLink: import_zod.z.string().nullable().meta({
635
1523
  description: "The API link to the next chapter. Relative to the API origin. Null if this is the last chapter in the commentary."
636
1524
  }),
1525
+ nextChapterReference: CommentaryChapterReferenceSchema.nullable().meta({
1526
+ description: "The reference for the next chapter. Null if this is the last chapter in the commentary."
1527
+ }),
637
1528
  /**
638
1529
  * The link to the previous chapter.
639
1530
  * Null if this is the first chapter in the translation.
@@ -641,84 +1532,284 @@ const ApiCommentaryBookChapterSchema = import_common_types.CommentaryBookChapter
641
1532
  previousChapterApiLink: import_zod.z.string().nullable().meta({
642
1533
  description: "The API link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the commentary."
643
1534
  }),
1535
+ previousChapterReference: CommentaryChapterReferenceSchema.nullable().meta({
1536
+ description: "The reference for the previous chapter. Null if this is the first chapter in the commentary."
1537
+ }),
1538
+ /**
1539
+ * The number of verses that the chapter contains.
1540
+ */
1541
+ numberOfVerses: import_zod.z.number().meta({
1542
+ description: "The number of verses that the chapter contains."
1543
+ }),
1544
+ /**
1545
+ * The link to the simplified version of this chapter.
1546
+ * Omitted if simplified chapters were not generated.
1547
+ */
1548
+ simpleChapterApiLink: import_zod.z.string().optional().meta({
1549
+ description: "The API link to the simplified version of this chapter. Relative to the API origin. Omitted if simplified chapters are not available."
1550
+ })
1551
+ }).meta({
1552
+ id: "ApiCommentaryBookChapter",
1553
+ description: "Defines a schema that contains information about a book chapter in a commentary."
1554
+ });
1555
+ const ApiSimpleCommentaryBookChapterSchema = ApiCommentaryBookChapterSchema.omit({
1556
+ chapter: true,
1557
+ simpleChapterApiLink: true
1558
+ }).extend({
1559
+ /**
1560
+ * The simplified information for the chapter.
1561
+ */
1562
+ chapter: import_zod.z.lazy(() => import_common_types.SimpleCommentaryChapterDataSchema).meta({
1563
+ description: "The simplified information for the chapter. Each verse contains a single text string, and the footnotes and formatting are represented by offsets into that string."
1564
+ }),
1565
+ /**
1566
+ * The link to the regular version of this chapter.
1567
+ */
1568
+ fullChapterApiLink: import_zod.z.string().meta({
1569
+ description: "The API link to the regular (non-simplified) version of this chapter. Relative to the API origin."
1570
+ })
1571
+ }).meta({
1572
+ id: "ApiSimpleCommentaryBookChapter",
1573
+ description: "Defines a schema that contains information about a book chapter in a commentary, using the simplified chapter format."
1574
+ });
1575
+ const ApiDatasetBookChapterSchema = import_common_types.DatasetBookChapterSchema.extend({
1576
+ /**
1577
+ * The dataset information for the book chapter.
1578
+ */
1579
+ dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
1580
+ description: "The dataset information for the book chapter."
1581
+ }),
1582
+ /**
1583
+ * The book information for the book chapter.
1584
+ */
1585
+ book: import_zod.z.lazy(() => ApiDatasetBookSchema).meta({
1586
+ description: "The book information for the book chapter."
1587
+ }),
1588
+ /**
1589
+ * The link to this chapter.
1590
+ */
1591
+ thisChapterLink: import_zod.z.string().meta({
1592
+ description: "The API link for this chapter. Relative to the API origin."
1593
+ }),
1594
+ thisChapterReference: DatasetChapterReferenceSchema,
1595
+ /**
1596
+ * The link to the next chapter.
1597
+ * Null if this is the last chapter in the translation.
1598
+ */
1599
+ nextChapterApiLink: import_zod.z.string().nullable().meta({
1600
+ description: "The API link to the next chapter. Relative to the API origin. Null if this is the last chapter in the dataset."
1601
+ }),
1602
+ nextChapterReference: DatasetChapterReferenceSchema.nullable().meta({
1603
+ description: "The reference for the next chapter. Null if this is the last chapter in the dataset."
1604
+ }),
1605
+ /**
1606
+ * The link to the previous chapter.
1607
+ * Null if this is the first chapter in the translation.
1608
+ */
1609
+ previousChapterApiLink: import_zod.z.string().nullable().meta({
1610
+ description: "The API link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the dataset."
1611
+ }),
1612
+ previousChapterReference: DatasetChapterReferenceSchema.nullable().meta({
1613
+ description: "The reference for the previous chapter. Null if this is the first chapter in the dataset."
1614
+ }),
1615
+ /**
1616
+ * The number of verses that the chapter contains.
1617
+ */
1618
+ numberOfVerses: import_zod.z.number().meta({
1619
+ description: "The number of verses that the chapter contains."
1620
+ }),
1621
+ /**
1622
+ * The number of references that the chapter contains.
1623
+ */
1624
+ numberOfReferences: import_zod.z.number().meta({
1625
+ description: "The number of references that the chapter contains."
1626
+ })
1627
+ }).meta({
1628
+ id: "ApiDatasetBookChapter",
1629
+ description: "Defines a schema that contains information about a book chapter in a dataset."
1630
+ });
1631
+ const ApiTranslationBookChapterAudioSchema = import_zod.z.object({
1632
+ /**
1633
+ * The chapter that the audio is for.
1634
+ */
1635
+ chapter: import_zod.z.lazy(() => ApiTranslationBookChapterSchema).meta({
1636
+ description: "The chapter that the audio is for."
1637
+ }),
1638
+ /**
1639
+ * The link that the audio should be placed at.
1640
+ */
1641
+ link: import_zod.z.string().meta({
1642
+ description: "The link that the audio should be placed at. Relative to the API origin."
1643
+ }),
1644
+ /**
1645
+ * The original URL of the audio.
1646
+ */
1647
+ originalUrl: import_zod.z.string().meta({
1648
+ description: "The original URL of the audio."
1649
+ })
1650
+ });
1651
+ const ApiTranslationBookChapterAudioTimingsSchema = import_zod.z.object({
1652
+ /**
1653
+ * The ID of the translation.
1654
+ */
1655
+ translationId: import_zod.z.string().meta({
1656
+ description: "The ID of the translation."
1657
+ }),
1658
+ /**
1659
+ * The ID of the book.
1660
+ */
1661
+ bookId: import_zod.z.string().meta({
1662
+ description: "The ID of the book."
1663
+ }),
1664
+ /**
1665
+ * The number of the chapter.
1666
+ */
1667
+ chapterNumber: import_zod.z.number().meta({
1668
+ description: "The number of the chapter."
1669
+ }),
1670
+ /**
1671
+ * The reader for the chapter.
1672
+ */
1673
+ reader: import_zod.z.string().meta({
1674
+ description: "The reader for the chapter."
1675
+ }),
1676
+ /**
1677
+ * The link to the audio for these timings.
1678
+ */
1679
+ audioLink: import_zod.z.string().meta({
1680
+ description: "The link to the audio for these timings."
1681
+ }),
1682
+ /**
1683
+ * The link to the information for this chapter.
1684
+ */
1685
+ thisChapterLink: import_zod.z.string().meta({
1686
+ description: "The link to the information for this chapter."
1687
+ }),
1688
+ /**
1689
+ * The link to the information for the next chapter.
1690
+ * Null if this is the last chapter in the translation.
1691
+ */
1692
+ nextChapterLink: import_zod.z.string().nullable().meta({
1693
+ description: "The link to the information for the next chapter. Null if this is the last chapter in the translation."
1694
+ }),
1695
+ /**
1696
+ * The link to the information for the previous chapter.
1697
+ * Null if this is the first chapter in the translation.
1698
+ */
1699
+ previousChapterLink: import_zod.z.string().nullable().meta({
1700
+ description: "The link to the information for the previous chapter. Null if this is the first chapter in the translation."
1701
+ }),
1702
+ /**
1703
+ * The link to this audio timings file.
1704
+ */
1705
+ thisChapterAudioTimingsLink: import_zod.z.string().meta({
1706
+ description: "The link to this audio timings file."
1707
+ }),
1708
+ /**
1709
+ * The link to the timings for the next chapter.
1710
+ * Null if this is the last chapter in the translation.
1711
+ */
1712
+ nextChapterAudioTimingsLink: import_zod.z.string().nullable().meta({
1713
+ description: "The link to the timings for the next chapter. Null if this is the last chapter in the translation."
1714
+ }),
1715
+ /**
1716
+ * The link to the timings for the previous chapter.
1717
+ * Null if this is the first chapter in the translation.
1718
+ */
1719
+ previousChapterAudioTimingsLink: import_zod.z.string().nullable().meta({
1720
+ description: "The link to the timings for the previous chapter. Null if this is the first chapter in the translation."
1721
+ }),
644
1722
  /**
645
- * The number of verses that the chapter contains.
1723
+ * The times in seconds at which each verse starts, in order.
646
1724
  */
647
- numberOfVerses: import_zod.z.number().meta({
648
- description: "The number of verses that the chapter contains."
1725
+ verses: import_zod.z.array(import_zod.z.number()).meta({
1726
+ description: "The times in seconds at which each verse starts, in order. The first number (index 0) is the time in the recording at which the first verse starts."
649
1727
  })
650
1728
  }).meta({
651
- id: "ApiCommentaryBookChapter",
652
- description: "Defines a schema that contains information about a book chapter in a commentary."
1729
+ id: "ApiTranslationBookChapterAudioTimings",
1730
+ description: "Defines an interface that contains the audio timings for a book chapter, for a specific reader."
653
1731
  });
654
- const ApiDatasetBookChapterSchema = import_common_types.DatasetBookChapterSchema.extend({
1732
+ const ApiTranslationBookChapterWordsSchema = import_zod.z.object({
655
1733
  /**
656
- * The dataset information for the book chapter.
1734
+ * The ID of the translation.
657
1735
  */
658
- dataset: import_zod.z.lazy(() => ApiDatasetSchema).meta({
659
- description: "The dataset information for the book chapter."
1736
+ translationId: import_zod.z.string().meta({
1737
+ description: "The ID of the translation."
660
1738
  }),
661
1739
  /**
662
- * The book information for the book chapter.
1740
+ * The ID of the book.
663
1741
  */
664
- book: import_zod.z.lazy(() => ApiDatasetBookSchema).meta({
665
- description: "The book information for the book chapter."
1742
+ bookId: import_zod.z.string().meta({
1743
+ description: "The ID of the book."
666
1744
  }),
667
1745
  /**
668
- * The link to this chapter.
1746
+ * The number of the chapter.
1747
+ */
1748
+ chapterNumber: import_zod.z.number().meta({
1749
+ description: "The number of the chapter."
1750
+ }),
1751
+ /**
1752
+ * The link to the information for this chapter.
669
1753
  */
670
1754
  thisChapterLink: import_zod.z.string().meta({
671
- description: "The API link for this chapter. Relative to the API origin."
1755
+ description: "The link to the information for this chapter."
672
1756
  }),
673
1757
  /**
674
- * The link to the next chapter.
1758
+ * The link to the information for the next chapter.
675
1759
  * Null if this is the last chapter in the translation.
676
1760
  */
677
- nextChapterApiLink: import_zod.z.string().nullable().meta({
678
- description: "The API link to the next chapter. Relative to the API origin. Null if this is the last chapter in the dataset."
1761
+ nextChapterLink: import_zod.z.string().nullable().meta({
1762
+ description: "The link to the information for the next chapter. Null if this is the last chapter in the translation."
679
1763
  }),
680
1764
  /**
681
- * The link to the previous chapter.
1765
+ * The link to the information for the previous chapter.
682
1766
  * Null if this is the first chapter in the translation.
683
1767
  */
684
- previousChapterApiLink: import_zod.z.string().nullable().meta({
685
- description: "The API link to the previous chapter. Relative to the API origin. Null if this is the first chapter in the dataset."
1768
+ previousChapterLink: import_zod.z.string().nullable().meta({
1769
+ description: "The link to the information for the previous chapter. Null if this is the first chapter in the translation."
686
1770
  }),
687
1771
  /**
688
- * The number of verses that the chapter contains.
1772
+ * The link to this words file.
689
1773
  */
690
- numberOfVerses: import_zod.z.number().meta({
691
- description: "The number of verses that the chapter contains."
1774
+ thisChapterWordsLink: import_zod.z.string().meta({
1775
+ description: "The link to this words file."
692
1776
  }),
693
1777
  /**
694
- * The number of references that the chapter contains.
1778
+ * The link to the words for the next chapter.
1779
+ * Null if this is the last chapter in the translation, or if the next chapter
1780
+ * doesn't have any word-level annotations.
695
1781
  */
696
- numberOfReferences: import_zod.z.number().meta({
697
- description: "The number of references that the chapter contains."
698
- })
699
- }).meta({
700
- id: "ApiDatasetBookChapter",
701
- description: "Defines a schema that contains information about a book chapter in a dataset."
702
- });
703
- const ApiTranslationBookChapterAudioSchema = import_zod.z.object({
1782
+ nextChapterWordsLink: import_zod.z.string().nullable().meta({
1783
+ description: "The link to the words for the next chapter. Null if this is the last chapter in the translation, or if the next chapter doesn't have any word-level annotations."
1784
+ }),
704
1785
  /**
705
- * The chapter that the audio is for.
1786
+ * The link to the words for the previous chapter.
1787
+ * Null if this is the first chapter in the translation, or if the previous
1788
+ * chapter doesn't have any word-level annotations.
706
1789
  */
707
- chapter: import_zod.z.lazy(() => ApiTranslationBookChapterSchema).meta({
708
- description: "The chapter that the audio is for."
1790
+ previousChapterWordsLink: import_zod.z.string().nullable().meta({
1791
+ description: "The link to the words for the previous chapter. Null if this is the first chapter in the translation, or if the previous chapter doesn't have any word-level annotations."
709
1792
  }),
710
1793
  /**
711
- * The link that the audio should be placed at.
1794
+ * The annotated words for each verse in the chapter.
712
1795
  */
713
- link: import_zod.z.string().meta({
714
- description: "The link that the audio should be placed at. Relative to the API origin."
715
- }),
1796
+ verses: import_zod.z.record(import_zod.z.string(), import_zod.z.array(import_zod.z.lazy(() => import_common_types.ChapterWordSchema))).meta({
1797
+ description: "The annotated words for each verse in the chapter, keyed by verse number. Each list is in the order that the words occur in the verse."
1798
+ })
1799
+ }).meta({
1800
+ id: "ApiTranslationBookChapterWords",
1801
+ description: "Defines an interface that contains the word-level annotations for a book chapter."
1802
+ });
1803
+ const ApiSimpleTranslationBookChapterWordsSchema = ApiTranslationBookChapterWordsSchema.extend({
716
1804
  /**
717
- * The original URL of the audio.
1805
+ * The annotated words for each verse in the chapter.
718
1806
  */
719
- originalUrl: import_zod.z.string().meta({
720
- description: "The original URL of the audio."
1807
+ verses: import_zod.z.record(import_zod.z.string(), import_zod.z.array(import_zod.z.lazy(() => import_common_types.SimpleChapterWordSchema))).meta({
1808
+ description: "The annotated words for each verse in the chapter, keyed by verse number. Each list is in the order that the words occur in the verse. The offsets are into the text of the simplified verse."
721
1809
  })
1810
+ }).meta({
1811
+ id: "ApiSimpleTranslationBookChapterWords",
1812
+ description: "Defines an interface that contains the word-level annotations for a book chapter, with their offsets remapped onto the text of each simplified verse."
722
1813
  });
723
1814
  const ApiCommentaryProfileContentSchema = import_zod.z.object({
724
1815
  /**
@@ -743,6 +1834,7 @@ const ApiCommentaryProfileContentSchema = import_zod.z.object({
743
1834
  function generateApiForDataset(dataset, options = {}) {
744
1835
  const { useCommonName, pathPrefix } = options;
745
1836
  const apiPathPrefix = pathPrefix ? pathPrefix : "";
1837
+ const generateSimpleChapterFiles = !!options.generateSimpleChapterFiles;
746
1838
  let api = {
747
1839
  availableTranslations: {
748
1840
  translations: []
@@ -750,7 +1842,10 @@ function generateApiForDataset(dataset, options = {}) {
750
1842
  translationBooks: [],
751
1843
  translationBookChapters: [],
752
1844
  translationBookChapterAudio: [],
1845
+ translationBookChapterAudioTimings: [],
1846
+ translationBookChapterWords: [],
753
1847
  translationComplete: [],
1848
+ simpleTranslationComplete: [],
754
1849
  availableCommentaries: {
755
1850
  commentaries: []
756
1851
  },
@@ -760,9 +1855,21 @@ function generateApiForDataset(dataset, options = {}) {
760
1855
  commentaryProfileContents: [],
761
1856
  pathPrefix: apiPathPrefix
762
1857
  };
1858
+ if (generateSimpleChapterFiles) {
1859
+ api.simpleTranslationBookChapters = [];
1860
+ api.simpleCommentaryBookChapters = [];
1861
+ }
1862
+ if (generateSimpleChapterFiles || options.generateCompleteTranslationFiles) {
1863
+ api.simpleTranslationBookChapterWords = [];
1864
+ }
763
1865
  const getNativeName = options.getNativeName;
764
1866
  const getEnglishName = options.getEnglishName;
765
1867
  for (let { books, ...translation } of dataset.translations) {
1868
+ let hasSimpleWords2 = function(chapter) {
1869
+ const words = simplifiedChapters.get(chapter)?.words;
1870
+ return !!words && Object.keys(words).length > 0;
1871
+ };
1872
+ var hasSimpleWords = hasSimpleWords2;
766
1873
  let numberOfBooks = 0;
767
1874
  let numberOfApocryphalBooks = 0;
768
1875
  for (let book of books) {
@@ -780,6 +1887,11 @@ function generateApiForDataset(dataset, options = {}) {
780
1887
  apiPathPrefix
781
1888
  ),
782
1889
  completeTranslationApiLink: options.generateCompleteTranslationFiles ? completeTranslationApiLink(translation.id, apiPathPrefix) : void 0,
1890
+ simpleCompleteTranslationApiLink: options.generateCompleteTranslationFiles ? completeTranslationApiLink(
1891
+ translation.id,
1892
+ apiPathPrefix,
1893
+ SIMPLE_JSON_EXTENSION
1894
+ ) : void 0,
783
1895
  numberOfBooks,
784
1896
  totalNumberOfChapters: 0,
785
1897
  totalNumberOfVerses: 0,
@@ -794,6 +1906,9 @@ function generateApiForDataset(dataset, options = {}) {
794
1906
  books: []
795
1907
  };
796
1908
  let translationChapters = [];
1909
+ let pendingAudioTimings = [];
1910
+ let rawAudioTimingsByChapter = /* @__PURE__ */ new Map();
1911
+ let rawWordsByChapter = /* @__PURE__ */ new Map();
797
1912
  for (let { chapters, ...book } of books) {
798
1913
  const firstChapterNumber = chapters[0]?.chapter.number;
799
1914
  const lastChapterNumber = chapters[chapters.length - 1]?.chapter.number;
@@ -807,6 +1922,11 @@ function generateApiForDataset(dataset, options = {}) {
807
1922
  "json",
808
1923
  apiPathPrefix
809
1924
  ),
1925
+ firstChapterReference: {
1926
+ translationId: translation.id,
1927
+ book: book.id,
1928
+ chapter: firstChapterNumber
1929
+ },
810
1930
  lastChapterNumber,
811
1931
  lastChapterApiLink: bookChapterApiLink(
812
1932
  translation.id,
@@ -815,11 +1935,22 @@ function generateApiForDataset(dataset, options = {}) {
815
1935
  "json",
816
1936
  apiPathPrefix
817
1937
  ),
1938
+ lastChapterReference: {
1939
+ translationId: translation.id,
1940
+ book: book.id,
1941
+ chapter: lastChapterNumber
1942
+ },
818
1943
  numberOfChapters: chapters.length,
819
1944
  totalNumberOfVerses: 0
820
1945
  };
821
- for (let { chapter, thisChapterAudioLinks } of chapters) {
1946
+ for (let {
1947
+ chapter,
1948
+ thisChapterAudioLinks,
1949
+ thisChapterAudioTimings,
1950
+ thisChapterWords
1951
+ } of chapters) {
822
1952
  const audio = {};
1953
+ const audioTimings = {};
823
1954
  const apiBookChapter = {
824
1955
  translation: apiTranslation,
825
1956
  book: apiBook,
@@ -831,12 +1962,29 @@ function generateApiForDataset(dataset, options = {}) {
831
1962
  "json",
832
1963
  apiPathPrefix
833
1964
  ),
1965
+ thisChapterReference: {
1966
+ translationId: translation.id,
1967
+ book: book.id,
1968
+ chapter: chapter.number
1969
+ },
834
1970
  thisChapterAudioLinks: audio,
835
1971
  nextChapterApiLink: null,
1972
+ nextChapterReference: null,
836
1973
  nextChapterAudioLinks: null,
837
1974
  previousChapterApiLink: null,
1975
+ previousChapterReference: null,
838
1976
  previousChapterAudioLinks: null,
839
- numberOfVerses: 0
1977
+ thisChapterAudioTimings: audioTimings,
1978
+ nextChapterAudioTimings: null,
1979
+ previousChapterAudioTimings: null,
1980
+ numberOfVerses: 0,
1981
+ simpleChapterApiLink: generateSimpleChapterFiles ? bookChapterApiLink(
1982
+ translation.id,
1983
+ getBookLink(book),
1984
+ chapter.number,
1985
+ SIMPLE_JSON_EXTENSION,
1986
+ apiPathPrefix
1987
+ ) : void 0
840
1988
  };
841
1989
  for (let reader in thisChapterAudioLinks) {
842
1990
  if (options.generateAudioFiles) {
@@ -857,6 +2005,34 @@ function generateApiForDataset(dataset, options = {}) {
857
2005
  audio[reader] = thisChapterAudioLinks[reader];
858
2006
  }
859
2007
  }
2008
+ rawAudioTimingsByChapter.set(
2009
+ apiBookChapter,
2010
+ thisChapterAudioTimings
2011
+ );
2012
+ if (thisChapterWords) {
2013
+ apiBookChapter.thisChapterWordsLink = bookChapterWordsApiLink(
2014
+ translation.id,
2015
+ getBookLink(book),
2016
+ chapter.number,
2017
+ apiPathPrefix
2018
+ );
2019
+ rawWordsByChapter.set(apiBookChapter, thisChapterWords);
2020
+ }
2021
+ for (let reader in thisChapterAudioTimings) {
2022
+ const verses = thisChapterAudioTimings[reader];
2023
+ audioTimings[reader] = bookChapterAudioTimingsApiLink(
2024
+ translation.id,
2025
+ getBookLink(book),
2026
+ chapter.number,
2027
+ reader,
2028
+ apiPathPrefix
2029
+ );
2030
+ pendingAudioTimings.push({
2031
+ reader,
2032
+ verses,
2033
+ apiBookChapter
2034
+ });
2035
+ }
860
2036
  for (let c of chapter.content) {
861
2037
  if (c.type === "verse") {
862
2038
  apiBookChapter.numberOfVerses++;
@@ -882,54 +2058,228 @@ function generateApiForDataset(dataset, options = {}) {
882
2058
  }
883
2059
  }
884
2060
  for (let i = 0; i < translationChapters.length; i++) {
2061
+ const currentChapter = translationChapters[i];
885
2062
  if (i > 0) {
886
- translationChapters[i].previousChapterApiLink = bookChapterApiLink(
2063
+ const previousChapter = translationChapters[i - 1];
2064
+ currentChapter.previousChapterApiLink = bookChapterApiLink(
887
2065
  translation.id,
888
- getBookLink(translationChapters[i - 1].book),
889
- translationChapters[i - 1].chapter.number,
2066
+ getBookLink(previousChapter.book),
2067
+ previousChapter.chapter.number,
890
2068
  "json",
891
2069
  apiPathPrefix
892
2070
  );
893
- translationChapters[i].previousChapterAudioLinks = translationChapters[i - 1].thisChapterAudioLinks;
2071
+ currentChapter.previousChapterReference = {
2072
+ translationId: translation.id,
2073
+ book: previousChapter.book.id,
2074
+ chapter: previousChapter.chapter.number
2075
+ };
2076
+ currentChapter.previousChapterAudioLinks = previousChapter.thisChapterAudioLinks;
2077
+ currentChapter.previousChapterAudioTimings = previousChapter.thisChapterAudioTimings;
2078
+ if (previousChapter.thisChapterWordsLink) {
2079
+ currentChapter.previousChapterWordsLink = previousChapter.thisChapterWordsLink;
2080
+ }
894
2081
  }
895
2082
  if (i < translationChapters.length - 1) {
896
- translationChapters[i].nextChapterApiLink = bookChapterApiLink(
2083
+ const nextChapter = translationChapters[i + 1];
2084
+ currentChapter.nextChapterApiLink = bookChapterApiLink(
897
2085
  translation.id,
898
- getBookLink(translationChapters[i + 1].book),
899
- translationChapters[i + 1].chapter.number,
2086
+ getBookLink(nextChapter.book),
2087
+ nextChapter.chapter.number,
900
2088
  "json",
901
2089
  apiPathPrefix
902
2090
  );
903
- translationChapters[i].nextChapterAudioLinks = translationChapters[i + 1].thisChapterAudioLinks;
2091
+ currentChapter.nextChapterReference = {
2092
+ translationId: translation.id,
2093
+ book: nextChapter.book.id,
2094
+ chapter: nextChapter.chapter.number
2095
+ };
2096
+ currentChapter.nextChapterAudioLinks = nextChapter.thisChapterAudioLinks;
2097
+ currentChapter.nextChapterAudioTimings = nextChapter.thisChapterAudioTimings;
2098
+ if (nextChapter.thisChapterWordsLink) {
2099
+ currentChapter.nextChapterWordsLink = nextChapter.thisChapterWordsLink;
2100
+ }
2101
+ }
2102
+ }
2103
+ const simplifiedChapters = /* @__PURE__ */ new Map();
2104
+ if (generateSimpleChapterFiles || options.generateCompleteTranslationFiles) {
2105
+ for (let chapter of translationChapters) {
2106
+ simplifiedChapters.set(
2107
+ chapter,
2108
+ (0, import_simple.simplifyChapter)(
2109
+ chapter.chapter,
2110
+ rawWordsByChapter.get(chapter)
2111
+ )
2112
+ );
2113
+ }
2114
+ }
2115
+ const simpleChapterLink = (chapter) => bookChapterApiLink(
2116
+ translation.id,
2117
+ getBookLink(chapter.book),
2118
+ chapter.chapter.number,
2119
+ SIMPLE_JSON_EXTENSION,
2120
+ apiPathPrefix
2121
+ );
2122
+ const simpleWordsLink = (chapter) => hasSimpleWords2(chapter) ? bookChapterWordsApiLink(
2123
+ translation.id,
2124
+ getBookLink(chapter.book),
2125
+ chapter.chapter.number,
2126
+ apiPathPrefix,
2127
+ SIMPLE_JSON_EXTENSION
2128
+ ) : void 0;
2129
+ if (api.simpleTranslationBookChapters || api.simpleTranslationBookChapterWords) {
2130
+ for (let i = 0; i < translationChapters.length; i++) {
2131
+ const currentChapter = translationChapters[i];
2132
+ const previousChapter = translationChapters[i - 1];
2133
+ const nextChapter = translationChapters[i + 1];
2134
+ const simplified = simplifiedChapters.get(currentChapter);
2135
+ let simpleChapter;
2136
+ if (api.simpleTranslationBookChapters) {
2137
+ const {
2138
+ chapter,
2139
+ simpleChapterApiLink,
2140
+ thisChapterWordsLink,
2141
+ nextChapterWordsLink,
2142
+ previousChapterWordsLink,
2143
+ ...rest
2144
+ } = currentChapter;
2145
+ simpleChapter = {
2146
+ ...rest,
2147
+ chapter: simplified.chapter,
2148
+ thisChapterLink: simpleChapterLink(currentChapter),
2149
+ fullChapterApiLink: rest.thisChapterLink,
2150
+ previousChapterApiLink: previousChapter ? simpleChapterLink(previousChapter) : null,
2151
+ nextChapterApiLink: nextChapter ? simpleChapterLink(nextChapter) : null
2152
+ };
2153
+ }
2154
+ const thisWordsLink = simpleWordsLink(currentChapter);
2155
+ if (thisWordsLink) {
2156
+ if (simpleChapter) {
2157
+ simpleChapter.thisChapterWordsLink = thisWordsLink;
2158
+ }
2159
+ api.simpleTranslationBookChapterWords?.push({
2160
+ translationId: translation.id,
2161
+ bookId: currentChapter.book.id,
2162
+ chapterNumber: currentChapter.chapter.number,
2163
+ thisChapterLink: simpleChapter?.thisChapterLink ?? currentChapter.thisChapterLink,
2164
+ nextChapterLink: simpleChapter?.nextChapterApiLink ?? currentChapter.nextChapterApiLink,
2165
+ previousChapterLink: simpleChapter?.previousChapterApiLink ?? currentChapter.previousChapterApiLink,
2166
+ thisChapterWordsLink: thisWordsLink,
2167
+ nextChapterWordsLink: nextChapter ? simpleWordsLink(nextChapter) ?? null : null,
2168
+ previousChapterWordsLink: previousChapter ? simpleWordsLink(previousChapter) ?? null : null,
2169
+ verses: simplified.words
2170
+ });
2171
+ }
2172
+ if (simpleChapter) {
2173
+ const nextWordsLink = nextChapter ? simpleWordsLink(nextChapter) : void 0;
2174
+ if (nextWordsLink) {
2175
+ simpleChapter.nextChapterWordsLink = nextWordsLink;
2176
+ }
2177
+ const previousWordsLink = previousChapter ? simpleWordsLink(previousChapter) : void 0;
2178
+ if (previousWordsLink) {
2179
+ simpleChapter.previousChapterWordsLink = previousWordsLink;
2180
+ }
2181
+ api.simpleTranslationBookChapters.push(simpleChapter);
2182
+ }
2183
+ }
2184
+ }
2185
+ for (let { reader, verses, apiBookChapter } of pendingAudioTimings) {
2186
+ api.translationBookChapterAudioTimings.push({
2187
+ translationId: translation.id,
2188
+ bookId: apiBookChapter.book.id,
2189
+ chapterNumber: apiBookChapter.chapter.number,
2190
+ reader,
2191
+ audioLink: apiBookChapter.thisChapterAudioLinks[reader] ?? "",
2192
+ thisChapterLink: apiBookChapter.thisChapterLink,
2193
+ nextChapterLink: apiBookChapter.nextChapterApiLink,
2194
+ previousChapterLink: apiBookChapter.previousChapterApiLink,
2195
+ thisChapterAudioTimingsLink: apiBookChapter.thisChapterAudioTimings[reader],
2196
+ nextChapterAudioTimingsLink: apiBookChapter.nextChapterAudioTimings?.[reader] ?? null,
2197
+ previousChapterAudioTimingsLink: apiBookChapter.previousChapterAudioTimings?.[reader] ?? null,
2198
+ verses
2199
+ });
2200
+ }
2201
+ for (let apiBookChapter of translationChapters) {
2202
+ const words = rawWordsByChapter.get(apiBookChapter);
2203
+ if (!words || !apiBookChapter.thisChapterWordsLink) {
2204
+ continue;
904
2205
  }
2206
+ api.translationBookChapterWords.push({
2207
+ translationId: translation.id,
2208
+ bookId: apiBookChapter.book.id,
2209
+ chapterNumber: apiBookChapter.chapter.number,
2210
+ thisChapterLink: apiBookChapter.thisChapterLink,
2211
+ nextChapterLink: apiBookChapter.nextChapterApiLink,
2212
+ previousChapterLink: apiBookChapter.previousChapterApiLink,
2213
+ thisChapterWordsLink: apiBookChapter.thisChapterWordsLink,
2214
+ nextChapterWordsLink: apiBookChapter.nextChapterWordsLink ?? null,
2215
+ previousChapterWordsLink: apiBookChapter.previousChapterWordsLink ?? null,
2216
+ verses: words
2217
+ });
905
2218
  }
906
2219
  api.availableTranslations.translations.push(apiTranslation);
907
2220
  api.translationBooks.push(translationBooks);
908
2221
  if (options.generateCompleteTranslationFiles) {
2222
+ const completeBooks = translationBooks.books.map((book) => ({
2223
+ book,
2224
+ chapters: translationChapters.filter(
2225
+ (ch) => ch.book.id === book.id
2226
+ )
2227
+ }));
2228
+ const completeBook = (book, chapters) => ({
2229
+ id: book.id,
2230
+ name: book.name,
2231
+ commonName: book.commonName,
2232
+ title: book.title,
2233
+ order: book.order,
2234
+ numberOfChapters: book.numberOfChapters,
2235
+ totalNumberOfVerses: book.totalNumberOfVerses,
2236
+ isApocryphal: book.isApocryphal,
2237
+ chapters
2238
+ });
2239
+ const completeChapter = (chapter) => ({
2240
+ numberOfVerses: chapter.numberOfVerses,
2241
+ thisChapterAudioLinks: chapter.thisChapterAudioLinks,
2242
+ // The complete files contain the raw audio timings rather than links
2243
+ // to them, since the point is to have everything in one file.
2244
+ thisChapterAudioTimings: rawAudioTimingsByChapter.get(chapter) ?? {}
2245
+ });
909
2246
  const completeTranslation = {
910
2247
  translation: apiTranslation,
911
- books: translationBooks.books.map((book) => {
912
- const bookChapters = translationChapters.filter(
913
- (ch) => ch.book.id === book.id
914
- );
915
- return {
916
- id: book.id,
917
- name: book.name,
918
- commonName: book.commonName,
919
- title: book.title,
920
- order: book.order,
921
- numberOfChapters: book.numberOfChapters,
922
- totalNumberOfVerses: book.totalNumberOfVerses,
923
- isApocryphal: book.isApocryphal,
924
- chapters: bookChapters.map((ch) => ({
925
- numberOfVerses: ch.numberOfVerses,
926
- thisChapterAudioLinks: ch.thisChapterAudioLinks,
2248
+ books: completeBooks.map(
2249
+ ({ book, chapters }) => completeBook(
2250
+ book,
2251
+ chapters.map((ch) => ({
2252
+ ...completeChapter(ch),
2253
+ // The complete files link to the word annotations
2254
+ // rather than embedding them, same as the regular
2255
+ // per-chapter endpoint.
2256
+ ...ch.thisChapterWordsLink ? {
2257
+ thisChapterWordsLink: ch.thisChapterWordsLink
2258
+ } : {},
927
2259
  chapter: ch.chapter
928
2260
  }))
929
- };
930
- })
2261
+ )
2262
+ )
931
2263
  };
932
2264
  api.translationComplete.push(completeTranslation);
2265
+ const simpleCompleteTranslation = {
2266
+ translation: apiTranslation,
2267
+ books: completeBooks.map(
2268
+ ({ book, chapters }) => completeBook(
2269
+ book,
2270
+ chapters.map((ch) => {
2271
+ const simplified = simplifiedChapters.get(ch);
2272
+ const wordsLink = simpleWordsLink(ch);
2273
+ return {
2274
+ ...completeChapter(ch),
2275
+ ...wordsLink ? { thisChapterWordsLink: wordsLink } : {},
2276
+ chapter: simplified.chapter
2277
+ };
2278
+ })
2279
+ )
2280
+ )
2281
+ };
2282
+ api.simpleTranslationComplete.push(simpleCompleteTranslation);
933
2283
  }
934
2284
  }
935
2285
  for (let { books, profiles, ...commentary } of dataset.commentaries) {
@@ -974,6 +2324,11 @@ function generateApiForDataset(dataset, options = {}) {
974
2324
  "json",
975
2325
  apiPathPrefix
976
2326
  ) : null,
2327
+ firstChapterReference: firstChapterNumber ? {
2328
+ commentaryId: commentary.id,
2329
+ book: book.id,
2330
+ chapter: firstChapterNumber
2331
+ } : null,
977
2332
  lastChapterNumber,
978
2333
  lastChapterApiLink: lastChapterNumber ? bookCommentaryChapterApiLink(
979
2334
  commentary.id,
@@ -982,6 +2337,11 @@ function generateApiForDataset(dataset, options = {}) {
982
2337
  "json",
983
2338
  apiPathPrefix
984
2339
  ) : null,
2340
+ lastChapterReference: lastChapterNumber ? {
2341
+ commentaryId: commentary.id,
2342
+ book: book.id,
2343
+ chapter: lastChapterNumber
2344
+ } : null,
985
2345
  numberOfChapters: chapters.length,
986
2346
  totalNumberOfVerses: 0
987
2347
  };
@@ -997,9 +2357,23 @@ function generateApiForDataset(dataset, options = {}) {
997
2357
  "json",
998
2358
  apiPathPrefix
999
2359
  ),
2360
+ thisChapterReference: {
2361
+ commentaryId: commentary.id,
2362
+ book: book.id,
2363
+ chapter: chapter.number
2364
+ },
1000
2365
  nextChapterApiLink: null,
2366
+ nextChapterReference: null,
1001
2367
  previousChapterApiLink: null,
1002
- numberOfVerses: 0
2368
+ previousChapterReference: null,
2369
+ numberOfVerses: 0,
2370
+ simpleChapterApiLink: generateSimpleChapterFiles ? bookCommentaryChapterApiLink(
2371
+ commentary.id,
2372
+ getBookLink(book),
2373
+ chapter.number,
2374
+ SIMPLE_JSON_EXTENSION,
2375
+ apiPathPrefix
2376
+ ) : void 0
1003
2377
  };
1004
2378
  for (let c of chapter.content) {
1005
2379
  if (c.type === "verse") {
@@ -1053,6 +2427,11 @@ function generateApiForDataset(dataset, options = {}) {
1053
2427
  "json",
1054
2428
  apiPathPrefix
1055
2429
  );
2430
+ commentaryChapters[i].previousChapterReference = {
2431
+ commentaryId: commentary.id,
2432
+ book: commentaryChapters[i - 1].book.id,
2433
+ chapter: commentaryChapters[i - 1].chapter.number
2434
+ };
1056
2435
  }
1057
2436
  if (i < commentaryChapters.length - 1) {
1058
2437
  commentaryChapters[i].nextChapterApiLink = bookCommentaryChapterApiLink(
@@ -1062,13 +2441,47 @@ function generateApiForDataset(dataset, options = {}) {
1062
2441
  "json",
1063
2442
  apiPathPrefix
1064
2443
  );
2444
+ commentaryChapters[i].nextChapterReference = {
2445
+ commentaryId: commentary.id,
2446
+ book: commentaryChapters[i + 1].book.id,
2447
+ chapter: commentaryChapters[i + 1].chapter.number
2448
+ };
2449
+ }
2450
+ }
2451
+ if (api.simpleCommentaryBookChapters) {
2452
+ const simpleChapterLink = (chapter) => bookCommentaryChapterApiLink(
2453
+ commentary.id,
2454
+ getBookLink(chapter.book),
2455
+ chapter.chapter.number,
2456
+ SIMPLE_JSON_EXTENSION,
2457
+ apiPathPrefix
2458
+ );
2459
+ for (let i = 0; i < commentaryChapters.length; i++) {
2460
+ const { chapter, simpleChapterApiLink, ...currentChapter } = commentaryChapters[i];
2461
+ const previousChapter = commentaryChapters[i - 1];
2462
+ const nextChapter = commentaryChapters[i + 1];
2463
+ api.simpleCommentaryBookChapters.push({
2464
+ ...currentChapter,
2465
+ chapter: (0, import_simple.simplifyCommentaryChapter)(chapter),
2466
+ thisChapterLink: simpleChapterLink(commentaryChapters[i]),
2467
+ fullChapterApiLink: currentChapter.thisChapterLink,
2468
+ previousChapterApiLink: previousChapter ? simpleChapterLink(previousChapter) : null,
2469
+ nextChapterApiLink: nextChapter ? simpleChapterLink(nextChapter) : null
2470
+ });
1065
2471
  }
1066
2472
  }
1067
2473
  api.availableCommentaries.commentaries.push(apiCommentary);
1068
2474
  api.commentaryBooks.push(commentaryBooks);
1069
2475
  api.commentaryProfiles.push(commentaryProfiles);
1070
2476
  }
1071
- for (let { books, ...datasetInfo } of dataset.datasets ?? []) {
2477
+ for (let {
2478
+ books,
2479
+ people,
2480
+ places,
2481
+ events,
2482
+ peopleGroups,
2483
+ ...datasetInfo
2484
+ } of dataset.datasets ?? []) {
1072
2485
  const apiDataset = {
1073
2486
  ...datasetInfo,
1074
2487
  availableFormats: ["json"],
@@ -1101,6 +2514,11 @@ function generateApiForDataset(dataset, options = {}) {
1101
2514
  "json",
1102
2515
  apiPathPrefix
1103
2516
  ),
2517
+ firstChapterReference: {
2518
+ datasetId: datasetInfo.id,
2519
+ book: book.id,
2520
+ chapter: firstChapterNumber
2521
+ },
1104
2522
  lastChapterNumber,
1105
2523
  lastChapterApiLink: bookDatasetChapterApiLink(
1106
2524
  datasetInfo.id,
@@ -1109,6 +2527,11 @@ function generateApiForDataset(dataset, options = {}) {
1109
2527
  "json",
1110
2528
  apiPathPrefix
1111
2529
  ),
2530
+ lastChapterReference: {
2531
+ datasetId: datasetInfo.id,
2532
+ book: book.id,
2533
+ chapter: lastChapterNumber
2534
+ },
1112
2535
  numberOfChapters: chapters.length,
1113
2536
  totalNumberOfVerses: 0,
1114
2537
  totalNumberOfReferences: 0
@@ -1125,8 +2548,15 @@ function generateApiForDataset(dataset, options = {}) {
1125
2548
  "json",
1126
2549
  apiPathPrefix
1127
2550
  ),
2551
+ thisChapterReference: {
2552
+ datasetId: datasetInfo.id,
2553
+ book: book.id,
2554
+ chapter: chapter.number
2555
+ },
1128
2556
  nextChapterApiLink: null,
2557
+ nextChapterReference: null,
1129
2558
  previousChapterApiLink: null,
2559
+ previousChapterReference: null,
1130
2560
  numberOfVerses: chapter.content.length,
1131
2561
  numberOfReferences: 0
1132
2562
  };
@@ -1155,6 +2585,11 @@ function generateApiForDataset(dataset, options = {}) {
1155
2585
  "json",
1156
2586
  apiPathPrefix
1157
2587
  );
2588
+ datasetChapters[i].previousChapterReference = {
2589
+ datasetId: datasetInfo.id,
2590
+ book: datasetChapters[i - 1].book.id,
2591
+ chapter: datasetChapters[i - 1].chapter.number
2592
+ };
1158
2593
  }
1159
2594
  if (i < datasetChapters.length - 1) {
1160
2595
  datasetChapters[i].nextChapterApiLink = bookDatasetChapterApiLink(
@@ -1164,6 +2599,452 @@ function generateApiForDataset(dataset, options = {}) {
1164
2599
  "json",
1165
2600
  apiPathPrefix
1166
2601
  );
2602
+ datasetChapters[i].nextChapterReference = {
2603
+ datasetId: datasetInfo.id,
2604
+ book: datasetChapters[i + 1].book.id,
2605
+ chapter: datasetChapters[i + 1].chapter.number
2606
+ };
2607
+ }
2608
+ }
2609
+ const linkEntityRef = (collection, ref) => ref ? {
2610
+ ...ref,
2611
+ type: collection,
2612
+ apiLink: datasetEntityApiLink(
2613
+ datasetInfo.id,
2614
+ collection,
2615
+ ref.id,
2616
+ "json",
2617
+ apiPathPrefix
2618
+ )
2619
+ } : void 0;
2620
+ const linkEntityRefs = (collection, refs) => refs?.map((ref) => linkEntityRef(collection, ref));
2621
+ if (people) {
2622
+ const datasetPeople = {
2623
+ dataset: apiDataset,
2624
+ people: []
2625
+ };
2626
+ for (let person of people) {
2627
+ const thisPersonApiLink = datasetEntityApiLink(
2628
+ datasetInfo.id,
2629
+ "people",
2630
+ person.id,
2631
+ "json",
2632
+ apiPathPrefix
2633
+ );
2634
+ datasetPeople.people.push({
2635
+ id: person.id,
2636
+ name: person.name,
2637
+ isProperName: person.isProperName,
2638
+ gender: person.gender,
2639
+ numberOfReferences: person.references.length,
2640
+ thisPersonApiLink
2641
+ });
2642
+ const apiPerson = {
2643
+ dataset: apiDataset,
2644
+ person: {
2645
+ ...person,
2646
+ birthPlace: linkEntityRef("places", person.birthPlace),
2647
+ deathPlace: linkEntityRef("places", person.deathPlace),
2648
+ father: linkEntityRefs("people", person.father),
2649
+ mother: linkEntityRefs("people", person.mother),
2650
+ partners: linkEntityRefs("people", person.partners),
2651
+ children: linkEntityRefs("people", person.children),
2652
+ siblings: linkEntityRefs("people", person.siblings),
2653
+ halfSiblingsSameMother: linkEntityRefs(
2654
+ "people",
2655
+ person.halfSiblingsSameMother
2656
+ ),
2657
+ halfSiblingsSameFather: linkEntityRefs(
2658
+ "people",
2659
+ person.halfSiblingsSameFather
2660
+ ),
2661
+ memberOf: linkEntityRefs("groups", person.memberOf),
2662
+ events: linkEntityRefs("events", person.events)
2663
+ },
2664
+ thisPersonApiLink
2665
+ };
2666
+ if (!api.datasetPeopleContents) {
2667
+ api.datasetPeopleContents = [];
2668
+ }
2669
+ api.datasetPeopleContents.push(apiPerson);
2670
+ }
2671
+ apiDataset.listOfPeopleApiLink = listOfDatasetEntitiesApiLink(
2672
+ datasetInfo.id,
2673
+ "people",
2674
+ "json",
2675
+ apiPathPrefix
2676
+ );
2677
+ apiDataset.totalNumberOfPeople = people.length;
2678
+ if (!api.datasetPeople) {
2679
+ api.datasetPeople = [];
2680
+ }
2681
+ api.datasetPeople.push(datasetPeople);
2682
+ }
2683
+ if (places) {
2684
+ const datasetPlaces = {
2685
+ dataset: apiDataset,
2686
+ places: []
2687
+ };
2688
+ for (let place of places) {
2689
+ const thisPlaceApiLink = datasetEntityApiLink(
2690
+ datasetInfo.id,
2691
+ "places",
2692
+ place.id,
2693
+ "json",
2694
+ apiPathPrefix
2695
+ );
2696
+ datasetPlaces.places.push({
2697
+ id: place.id,
2698
+ name: place.name,
2699
+ featureType: place.featureType,
2700
+ latitude: place.latitude,
2701
+ longitude: place.longitude,
2702
+ numberOfReferences: place.references.length,
2703
+ thisPlaceApiLink
2704
+ });
2705
+ const apiPlace = {
2706
+ dataset: apiDataset,
2707
+ place: {
2708
+ ...place,
2709
+ rootPlace: linkEntityRef("places", place.rootPlace),
2710
+ duplicateOf: linkEntityRef("places", place.duplicateOf),
2711
+ people: linkEntityRefs("people", place.people),
2712
+ peopleBorn: linkEntityRefs("people", place.peopleBorn),
2713
+ peopleDied: linkEntityRefs("people", place.peopleDied),
2714
+ events: linkEntityRefs("events", place.events)
2715
+ },
2716
+ thisPlaceApiLink
2717
+ };
2718
+ if (!api.datasetPlaceContents) {
2719
+ api.datasetPlaceContents = [];
2720
+ }
2721
+ api.datasetPlaceContents.push(apiPlace);
2722
+ }
2723
+ apiDataset.listOfPlacesApiLink = listOfDatasetEntitiesApiLink(
2724
+ datasetInfo.id,
2725
+ "places",
2726
+ "json",
2727
+ apiPathPrefix
2728
+ );
2729
+ apiDataset.totalNumberOfPlaces = places.length;
2730
+ if (!api.datasetPlaces) {
2731
+ api.datasetPlaces = [];
2732
+ }
2733
+ api.datasetPlaces.push(datasetPlaces);
2734
+ }
2735
+ if (events) {
2736
+ const datasetEvents = {
2737
+ dataset: apiDataset,
2738
+ events: []
2739
+ };
2740
+ for (let event of events) {
2741
+ const thisEventApiLink = datasetEntityApiLink(
2742
+ datasetInfo.id,
2743
+ "events",
2744
+ event.id,
2745
+ "json",
2746
+ apiPathPrefix
2747
+ );
2748
+ datasetEvents.events.push({
2749
+ id: event.id,
2750
+ name: event.name,
2751
+ startDate: event.startDate,
2752
+ numberOfReferences: event.references.length,
2753
+ thisEventApiLink
2754
+ });
2755
+ const apiEvent = {
2756
+ dataset: apiDataset,
2757
+ event: {
2758
+ ...event,
2759
+ participants: linkEntityRefs(
2760
+ "people",
2761
+ event.participants
2762
+ ),
2763
+ locations: linkEntityRefs("places", event.locations),
2764
+ groups: linkEntityRefs("groups", event.groups),
2765
+ partOf: linkEntityRef("events", event.partOf),
2766
+ predecessor: linkEntityRef("events", event.predecessor)
2767
+ },
2768
+ thisEventApiLink
2769
+ };
2770
+ if (!api.datasetEventContents) {
2771
+ api.datasetEventContents = [];
2772
+ }
2773
+ api.datasetEventContents.push(apiEvent);
2774
+ }
2775
+ apiDataset.listOfEventsApiLink = listOfDatasetEntitiesApiLink(
2776
+ datasetInfo.id,
2777
+ "events",
2778
+ "json",
2779
+ apiPathPrefix
2780
+ );
2781
+ apiDataset.totalNumberOfEvents = events.length;
2782
+ if (!api.datasetEvents) {
2783
+ api.datasetEvents = [];
2784
+ }
2785
+ api.datasetEvents.push(datasetEvents);
2786
+ }
2787
+ if (peopleGroups) {
2788
+ const datasetPeopleGroups = {
2789
+ dataset: apiDataset,
2790
+ groups: []
2791
+ };
2792
+ for (let group of peopleGroups) {
2793
+ const thisPeopleGroupApiLink = datasetEntityApiLink(
2794
+ datasetInfo.id,
2795
+ "groups",
2796
+ group.id,
2797
+ "json",
2798
+ apiPathPrefix
2799
+ );
2800
+ datasetPeopleGroups.groups.push({
2801
+ id: group.id,
2802
+ name: group.name,
2803
+ numberOfMembers: group.members?.length ?? 0,
2804
+ thisPeopleGroupApiLink
2805
+ });
2806
+ const apiGroup = {
2807
+ dataset: apiDataset,
2808
+ group: {
2809
+ ...group,
2810
+ members: linkEntityRefs("people", group.members),
2811
+ events: linkEntityRefs("events", group.events)
2812
+ },
2813
+ thisPeopleGroupApiLink
2814
+ };
2815
+ if (!api.datasetPeopleGroupContents) {
2816
+ api.datasetPeopleGroupContents = [];
2817
+ }
2818
+ api.datasetPeopleGroupContents.push(apiGroup);
2819
+ }
2820
+ apiDataset.listOfPeopleGroupsApiLink = listOfDatasetEntitiesApiLink(
2821
+ datasetInfo.id,
2822
+ "groups",
2823
+ "json",
2824
+ apiPathPrefix
2825
+ );
2826
+ apiDataset.totalNumberOfPeopleGroups = peopleGroups.length;
2827
+ if (!api.datasetPeopleGroups) {
2828
+ api.datasetPeopleGroups = [];
2829
+ }
2830
+ api.datasetPeopleGroups.push(datasetPeopleGroups);
2831
+ }
2832
+ if (books.length <= 0 && (people || places || events)) {
2833
+ let addEntityVerses2 = function(collection, references, createEntry) {
2834
+ for (let reference of references) {
2835
+ let bookChapters = chapterMap.get(reference.book);
2836
+ if (!bookChapters) {
2837
+ bookChapters = /* @__PURE__ */ new Map();
2838
+ chapterMap.set(reference.book, bookChapters);
2839
+ }
2840
+ let chapterEntities = bookChapters.get(reference.chapter);
2841
+ if (!chapterEntities) {
2842
+ chapterEntities = {
2843
+ people: /* @__PURE__ */ new Map(),
2844
+ places: /* @__PURE__ */ new Map(),
2845
+ events: /* @__PURE__ */ new Map()
2846
+ };
2847
+ bookChapters.set(reference.chapter, chapterEntities);
2848
+ }
2849
+ const entry = createEntry();
2850
+ const entities = chapterEntities[collection];
2851
+ let existing = entities.get(entry.id);
2852
+ if (!existing) {
2853
+ existing = { ...entry, verses: [] };
2854
+ entities.set(entry.id, existing);
2855
+ }
2856
+ const endVerse = reference.endVerse ?? reference.verse;
2857
+ for (let verse = reference.verse; verse <= endVerse; verse++) {
2858
+ existing.verses.push(verse);
2859
+ }
2860
+ }
2861
+ }, sortEntities2 = function(entities) {
2862
+ const list = [...entities.values()];
2863
+ for (let entity of list) {
2864
+ entity.verses.sort((a, b) => a - b);
2865
+ }
2866
+ return list.sort(
2867
+ (a, b) => a.verses[0] - b.verses[0] || a.id.localeCompare(b.id)
2868
+ );
2869
+ };
2870
+ var addEntityVerses = addEntityVerses2, sortEntities = sortEntities2;
2871
+ const chapterMap = /* @__PURE__ */ new Map();
2872
+ for (let person of people ?? []) {
2873
+ addEntityVerses2(
2874
+ "people",
2875
+ person.references,
2876
+ () => ({
2877
+ id: person.id,
2878
+ name: person.name,
2879
+ isProperName: person.isProperName,
2880
+ gender: person.gender,
2881
+ birthYear: person.birthYear,
2882
+ deathYear: person.deathYear,
2883
+ apiLink: datasetEntityApiLink(
2884
+ datasetInfo.id,
2885
+ "people",
2886
+ person.id,
2887
+ "json",
2888
+ apiPathPrefix
2889
+ )
2890
+ })
2891
+ );
2892
+ }
2893
+ for (let place of places ?? []) {
2894
+ addEntityVerses2(
2895
+ "places",
2896
+ place.references,
2897
+ () => ({
2898
+ id: place.id,
2899
+ name: place.name,
2900
+ featureType: place.featureType,
2901
+ latitude: place.latitude,
2902
+ longitude: place.longitude,
2903
+ apiLink: datasetEntityApiLink(
2904
+ datasetInfo.id,
2905
+ "places",
2906
+ place.id,
2907
+ "json",
2908
+ apiPathPrefix
2909
+ )
2910
+ })
2911
+ );
2912
+ }
2913
+ for (let event of events ?? []) {
2914
+ addEntityVerses2(
2915
+ "events",
2916
+ event.references,
2917
+ () => ({
2918
+ id: event.id,
2919
+ name: event.name,
2920
+ startDate: event.startDate,
2921
+ apiLink: datasetEntityApiLink(
2922
+ datasetInfo.id,
2923
+ "events",
2924
+ event.id,
2925
+ "json",
2926
+ apiPathPrefix
2927
+ )
2928
+ })
2929
+ );
2930
+ }
2931
+ const sortedBooks = [...chapterMap.keys()].sort(
2932
+ (a, b) => (import_book_order.bookOrderMap.get(a) ?? 9999) - (import_book_order.bookOrderMap.get(b) ?? 9999)
2933
+ );
2934
+ const entityChapters = [];
2935
+ for (let bookId of sortedBooks) {
2936
+ const bookChapters = chapterMap.get(bookId);
2937
+ const chapterNumbers = [...bookChapters.keys()].sort(
2938
+ (a, b) => a - b
2939
+ );
2940
+ const firstChapterNumber = chapterNumbers[0];
2941
+ const lastChapterNumber = chapterNumbers[chapterNumbers.length - 1];
2942
+ const apiBook = {
2943
+ id: bookId,
2944
+ order: import_book_order.bookOrderMap.get(bookId) ?? 9999,
2945
+ firstChapterNumber,
2946
+ firstChapterApiLink: bookDatasetChapterApiLink(
2947
+ datasetInfo.id,
2948
+ bookId,
2949
+ firstChapterNumber,
2950
+ "json",
2951
+ apiPathPrefix
2952
+ ),
2953
+ firstChapterReference: {
2954
+ datasetId: datasetInfo.id,
2955
+ book: bookId,
2956
+ chapter: firstChapterNumber
2957
+ },
2958
+ lastChapterNumber,
2959
+ lastChapterApiLink: bookDatasetChapterApiLink(
2960
+ datasetInfo.id,
2961
+ bookId,
2962
+ lastChapterNumber,
2963
+ "json",
2964
+ apiPathPrefix
2965
+ ),
2966
+ lastChapterReference: {
2967
+ datasetId: datasetInfo.id,
2968
+ book: bookId,
2969
+ chapter: lastChapterNumber
2970
+ },
2971
+ numberOfChapters: chapterNumbers.length,
2972
+ totalNumberOfVerses: 0,
2973
+ totalNumberOfReferences: 0
2974
+ };
2975
+ for (let chapterNumber of chapterNumbers) {
2976
+ const chapterEntities = bookChapters.get(chapterNumber);
2977
+ const chapterPeople = sortEntities2(chapterEntities.people);
2978
+ const chapterPlaces = sortEntities2(chapterEntities.places);
2979
+ const chapterEvents = sortEntities2(chapterEntities.events);
2980
+ const distinctVerses = /* @__PURE__ */ new Set();
2981
+ let numberOfReferences = 0;
2982
+ for (let list of [
2983
+ chapterPeople,
2984
+ chapterPlaces,
2985
+ chapterEvents
2986
+ ]) {
2987
+ for (let entity of list) {
2988
+ numberOfReferences += entity.verses.length;
2989
+ for (let verse of entity.verses) {
2990
+ distinctVerses.add(verse);
2991
+ }
2992
+ }
2993
+ }
2994
+ apiBook.totalNumberOfVerses += distinctVerses.size;
2995
+ apiBook.totalNumberOfReferences += numberOfReferences;
2996
+ const apiChapter = {
2997
+ dataset: apiDataset,
2998
+ book: apiBook,
2999
+ chapter: {
3000
+ number: chapterNumber,
3001
+ people: chapterPeople,
3002
+ places: chapterPlaces,
3003
+ events: chapterEvents
3004
+ },
3005
+ thisChapterLink: bookDatasetChapterApiLink(
3006
+ datasetInfo.id,
3007
+ bookId,
3008
+ chapterNumber,
3009
+ "json",
3010
+ apiPathPrefix
3011
+ ),
3012
+ thisChapterReference: {
3013
+ datasetId: datasetInfo.id,
3014
+ book: bookId,
3015
+ chapter: chapterNumber
3016
+ },
3017
+ nextChapterApiLink: null,
3018
+ nextChapterReference: null,
3019
+ previousChapterApiLink: null,
3020
+ previousChapterReference: null,
3021
+ numberOfPeople: chapterPeople.length,
3022
+ numberOfPlaces: chapterPlaces.length,
3023
+ numberOfEvents: chapterEvents.length
3024
+ };
3025
+ entityChapters.push(apiChapter);
3026
+ }
3027
+ datasetBooks.books.push(apiBook);
3028
+ apiDataset.totalNumberOfChapters += apiBook.numberOfChapters;
3029
+ apiDataset.totalNumberOfVerses += apiBook.totalNumberOfVerses;
3030
+ apiDataset.totalNumberOfReferences += apiBook.totalNumberOfReferences;
3031
+ }
3032
+ apiDataset.numberOfBooks = datasetBooks.books.length;
3033
+ for (let i = 0; i < entityChapters.length; i++) {
3034
+ if (i > 0) {
3035
+ entityChapters[i].previousChapterApiLink = entityChapters[i - 1].thisChapterLink;
3036
+ entityChapters[i].previousChapterReference = entityChapters[i - 1].thisChapterReference;
3037
+ }
3038
+ if (i < entityChapters.length - 1) {
3039
+ entityChapters[i].nextChapterApiLink = entityChapters[i + 1].thisChapterLink;
3040
+ entityChapters[i].nextChapterReference = entityChapters[i + 1].thisChapterReference;
3041
+ }
3042
+ }
3043
+ if (entityChapters.length > 0) {
3044
+ if (!api.datasetEntityBookChapters) {
3045
+ api.datasetEntityBookChapters = [];
3046
+ }
3047
+ api.datasetEntityBookChapters.push(...entityChapters);
1167
3048
  }
1168
3049
  }
1169
3050
  if (!api.availableDatasets) {
@@ -1202,9 +3083,21 @@ function generateFilesForApi(api) {
1202
3083
  for (let bookChapter of api.translationBookChapters) {
1203
3084
  files.push(jsonFile(bookChapter.thisChapterLink, bookChapter));
1204
3085
  }
3086
+ for (let bookChapter of api.simpleTranslationBookChapters ?? []) {
3087
+ files.push(jsonFile(bookChapter.thisChapterLink, bookChapter));
3088
+ }
1205
3089
  for (let audio of api.translationBookChapterAudio) {
1206
3090
  files.push(downloadedFile(audio.link, audio.originalUrl));
1207
3091
  }
3092
+ for (let timings of api.translationBookChapterAudioTimings) {
3093
+ files.push(jsonFile(timings.thisChapterAudioTimingsLink, timings));
3094
+ }
3095
+ for (let words of api.translationBookChapterWords) {
3096
+ files.push(jsonFile(words.thisChapterWordsLink, words));
3097
+ }
3098
+ for (let words of api.simpleTranslationBookChapterWords ?? []) {
3099
+ files.push(jsonFile(words.thisChapterWordsLink, words));
3100
+ }
1208
3101
  for (let complete of api.translationComplete) {
1209
3102
  if (complete.translation.completeTranslationApiLink) {
1210
3103
  files.push(
@@ -1215,6 +3108,16 @@ function generateFilesForApi(api) {
1215
3108
  );
1216
3109
  }
1217
3110
  }
3111
+ for (let complete of api.simpleTranslationComplete) {
3112
+ if (complete.translation.simpleCompleteTranslationApiLink) {
3113
+ files.push(
3114
+ jsonFile(
3115
+ complete.translation.simpleCompleteTranslationApiLink,
3116
+ complete
3117
+ )
3118
+ );
3119
+ }
3120
+ }
1218
3121
  files.push(
1219
3122
  jsonFile(
1220
3123
  `${api.pathPrefix}/api/available_commentaries.json`,
@@ -1246,6 +3149,9 @@ function generateFilesForApi(api) {
1246
3149
  for (let bookChapter of api.commentaryBookChapters) {
1247
3150
  files.push(jsonFile(bookChapter.thisChapterLink, bookChapter));
1248
3151
  }
3152
+ for (let bookChapter of api.simpleCommentaryBookChapters ?? []) {
3153
+ files.push(jsonFile(bookChapter.thisChapterLink, bookChapter));
3154
+ }
1249
3155
  if (api.availableDatasets) {
1250
3156
  files.push(
1251
3157
  jsonFile(
@@ -1269,6 +3175,44 @@ function generateFilesForApi(api) {
1269
3175
  );
1270
3176
  }
1271
3177
  }
3178
+ for (let entityChapter of api.datasetEntityBookChapters ?? []) {
3179
+ files.push(jsonFile(entityChapter.thisChapterLink, entityChapter));
3180
+ }
3181
+ for (let datasetPeople of api.datasetPeople ?? []) {
3182
+ files.push(
3183
+ jsonFile(datasetPeople.dataset.listOfPeopleApiLink, datasetPeople)
3184
+ );
3185
+ }
3186
+ for (let person of api.datasetPeopleContents ?? []) {
3187
+ files.push(jsonFile(person.thisPersonApiLink, person));
3188
+ }
3189
+ for (let datasetPlaces of api.datasetPlaces ?? []) {
3190
+ files.push(
3191
+ jsonFile(datasetPlaces.dataset.listOfPlacesApiLink, datasetPlaces)
3192
+ );
3193
+ }
3194
+ for (let place of api.datasetPlaceContents ?? []) {
3195
+ files.push(jsonFile(place.thisPlaceApiLink, place));
3196
+ }
3197
+ for (let datasetEvents of api.datasetEvents ?? []) {
3198
+ files.push(
3199
+ jsonFile(datasetEvents.dataset.listOfEventsApiLink, datasetEvents)
3200
+ );
3201
+ }
3202
+ for (let event of api.datasetEventContents ?? []) {
3203
+ files.push(jsonFile(event.thisEventApiLink, event));
3204
+ }
3205
+ for (let datasetPeopleGroups of api.datasetPeopleGroups ?? []) {
3206
+ files.push(
3207
+ jsonFile(
3208
+ datasetPeopleGroups.dataset.listOfPeopleGroupsApiLink,
3209
+ datasetPeopleGroups
3210
+ )
3211
+ );
3212
+ }
3213
+ for (let group of api.datasetPeopleGroupContents ?? []) {
3214
+ files.push(jsonFile(group.thisPeopleGroupApiLink, group));
3215
+ }
1272
3216
  return files;
1273
3217
  }
1274
3218
  async function* generateOutputFilesFromDatasets(datasets, options) {
@@ -1281,8 +3225,8 @@ async function* generateOutputFilesFromDatasets(datasets, options) {
1281
3225
  function listOfBooksApiLink(translationId, prefix = "") {
1282
3226
  return `${prefix}/api/${translationId}/books.json`;
1283
3227
  }
1284
- function completeTranslationApiLink(translationId, prefix = "") {
1285
- return `${prefix}/api/${translationId}/complete.json`;
3228
+ function completeTranslationApiLink(translationId, prefix = "", extension = "json") {
3229
+ return `${prefix}/api/${translationId}/complete.${extension}`;
1286
3230
  }
1287
3231
  function listOfCommentaryBooksApiLink(commentaryId, prefix = "") {
1288
3232
  return `${prefix}/api/c/${commentaryId}/books.json`;
@@ -1290,6 +3234,15 @@ function listOfCommentaryBooksApiLink(commentaryId, prefix = "") {
1290
3234
  function listOfDatasetBooksApiLink(datasetId, prefix = "") {
1291
3235
  return `${prefix}/api/d/${datasetId}/books.json`;
1292
3236
  }
3237
+ function listOfDatasetEntitiesApiLink(datasetId, collection, extension = "json", prefix = "") {
3238
+ return `${prefix}/api/d/${datasetId}/${collection}.${extension}`;
3239
+ }
3240
+ function datasetEntityApiLink(datasetId, collection, entityId, extension = "json", prefix = "") {
3241
+ return `${prefix}/api/d/${datasetId}/${collection}/${replaceSpacesWithUnderscores(
3242
+ entityId
3243
+ )}.${extension}`;
3244
+ }
3245
+ const SIMPLE_JSON_EXTENSION = "simple.json";
1293
3246
  function bookChapterApiLink(translationId, commonName, chapterNumber, extension, prefix = "") {
1294
3247
  return `${prefix}/api/${translationId}/${replaceSpacesWithUnderscores(
1295
3248
  commonName
@@ -1305,6 +3258,16 @@ function bookChapterAudioApiLink(translationId, bookId, chapterNumber, reader, p
1305
3258
  bookId
1306
3259
  )}/${chapterNumber}.${reader}.mp3`;
1307
3260
  }
3261
+ function bookChapterAudioTimingsApiLink(translationId, bookId, chapterNumber, reader, prefix = "") {
3262
+ return `${prefix}/api/${translationId}/${replaceSpacesWithUnderscores(
3263
+ bookId
3264
+ )}/${chapterNumber}.${reader}.audioTimings.json`;
3265
+ }
3266
+ function bookChapterWordsApiLink(translationId, bookId, chapterNumber, prefix = "", extension = "json") {
3267
+ return `${prefix}/api/${translationId}/${replaceSpacesWithUnderscores(
3268
+ bookId
3269
+ )}/${chapterNumber}.words.${extension}`;
3270
+ }
1308
3271
  function bookDatasetChapterApiLink(translationId, commonName, chapterNumber, extension, prefix = "") {
1309
3272
  return `${prefix}/api/d/${translationId}/${replaceSpacesWithUnderscores(
1310
3273
  commonName
@@ -1349,19 +3312,52 @@ function replaceSpacesWithUnderscores(str) {
1349
3312
  ApiDatasetBookChapterSchema,
1350
3313
  ApiDatasetBookSchema,
1351
3314
  ApiDatasetBooksSchema,
3315
+ ApiDatasetChapterEventSchema,
3316
+ ApiDatasetChapterPersonSchema,
3317
+ ApiDatasetChapterPlaceSchema,
3318
+ ApiDatasetEntityBookChapterSchema,
3319
+ ApiDatasetEntityChapterDataSchema,
3320
+ ApiDatasetEventSchema,
3321
+ ApiDatasetEventSummarySchema,
3322
+ ApiDatasetEventsSchema,
3323
+ ApiDatasetPeopleGroupSchema,
3324
+ ApiDatasetPeopleGroupSummarySchema,
3325
+ ApiDatasetPeopleGroupsSchema,
3326
+ ApiDatasetPeopleSchema,
3327
+ ApiDatasetPersonSchema,
3328
+ ApiDatasetPersonSummarySchema,
3329
+ ApiDatasetPlaceSchema,
3330
+ ApiDatasetPlaceSummarySchema,
3331
+ ApiDatasetPlacesSchema,
1352
3332
  ApiDatasetSchema,
3333
+ ApiSimpleCommentaryBookChapterSchema,
3334
+ ApiSimpleTranslationBookChapterSchema,
3335
+ ApiSimpleTranslationBookChapterWordsSchema,
3336
+ ApiSimpleTranslationCompleteBookSchema,
3337
+ ApiSimpleTranslationCompleteSchema,
1353
3338
  ApiTranslationBookChapterAudioSchema,
3339
+ ApiTranslationBookChapterAudioTimingsSchema,
1354
3340
  ApiTranslationBookChapterSchema,
3341
+ ApiTranslationBookChapterWordsSchema,
1355
3342
  ApiTranslationBookSchema,
1356
3343
  ApiTranslationBooksSchema,
1357
3344
  ApiTranslationCompleteBookSchema,
1358
3345
  ApiTranslationCompleteSchema,
1359
3346
  ApiTranslationSchema,
3347
+ CommentaryChapterReferenceSchema,
3348
+ DatasetChapterReferenceSchema,
3349
+ SIMPLE_JSON_EXTENSION,
3350
+ SimpleTranslationCompleteChapterSchema,
3351
+ TranslationChapterReferenceSchema,
3352
+ TranslationCompleteChapterSchema,
1360
3353
  bookChapterApiLink,
1361
3354
  bookChapterAudioApiLink,
3355
+ bookChapterAudioTimingsApiLink,
3356
+ bookChapterWordsApiLink,
1362
3357
  bookCommentaryChapterApiLink,
1363
3358
  bookDatasetChapterApiLink,
1364
3359
  completeTranslationApiLink,
3360
+ datasetEntityApiLink,
1365
3361
  downloadedFile,
1366
3362
  generateApiForDataset,
1367
3363
  generateFilesForApi,
@@ -1370,6 +3366,7 @@ function replaceSpacesWithUnderscores(str) {
1370
3366
  listOfBooksApiLink,
1371
3367
  listOfCommentaryBooksApiLink,
1372
3368
  listOfDatasetBooksApiLink,
3369
+ listOfDatasetEntitiesApiLink,
1373
3370
  profileCommentaryApiLink,
1374
3371
  profilesCommentaryApiLink,
1375
3372
  replaceSpacesWithUnderscores