UNPKG

@bible-api/bible-api

Version:
143 lines 5.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** A Bible version. */ class BibleVersion { /** Synonyms for the version. */ synonyms; /** The year the version was published. */ year; /** The short name of the version. */ shortName; /** The long name of the version. */ longName; /** The books in the version. */ booksData; /** * Creates a new Bible version. * * @param options The options for creating the Bible version. */ constructor(options) { this.synonyms = options.synonyms; this.year = options.year; this.shortName = options.shortName; this.longName = options.longName; this.booksData = options.booksData; } /** * Gets a verse from the Bible. * * @param bookId The ID of the book. * @param chapterNumber The number of the chapter. * @param verseNumber The number of the verse. * @returns The verse. * @throws If the book, chapter, or verse is not found. */ getVerse(options) { const { bookId, chapterNumber, verseNumber } = options; const book = this.booksData[bookId]; if (!book) { throw new Error(`Book not found: ${bookId}`); } const chapterData = book.chaptersData[chapterNumber]; if (!chapterData) { throw new Error(`Chapter not found: ${bookId} ${chapterNumber}`); } const verseData = chapterData[verseNumber]; if (!verseData) { throw new Error(`Verse not found: ${bookId} ${chapterNumber}:${verseNumber}`); } return { bookId, chapterNumber, verseNumber, name: `${book.name} ${chapterNumber}:${verseNumber} (${this.shortName})`, html: ('<span class="bible__verse">' + `<span class="bible__verse-number">${verseNumber}</span>` + verseData .replace(/\*\*(?<jesus>.+)\*\*/g, '<span class="bible__jesus">$<jesus></span>') .replace(/\*(?<italic>.+)\*/g, '<i>$<italic></i>') .replace(/`(?<note>.+)`/g, '<span class="bible__note">$<note></span>') + '</span>'), markdown: verseData, text: verseData .replace(/\*\*(?<jesus>.+)\*\*/g, '$<jesus>') .replace(/\*(?<italic>.+)\*/g, '[$<italic>]') .replace(/`(?<note>.+)`/g, '($<note>)') }; } /** * Gets a passage from the Bible. * * @param options The options for getting the passage. * @returns The passage. * @throws If the book, a chapter, or a verse is not found. */ getPassage(options) { const { bookId, start, end } = options; const book = this.booksData[bookId]; if (!book) { throw new Error(`Book not found: ${bookId}`); } if (start.chapterNumber > end.chapterNumber) { throw new Error(`The first chapter cannot be after last chapter`); } if (start.chapterNumber === end.chapterNumber && start.verseNumber > end.verseNumber) { throw new Error(`The first verse cannot be after last verse`); } const endChapter = book.chaptersData[end.chapterNumber]; if (!endChapter) { throw new Error(`Chapter not found: ${bookId} ${end.chapterNumber}`); } const endVerseNumber = Math.min(end.verseNumber, endChapter.length - 1); const verses = []; for (let chapterNumber = start.chapterNumber; chapterNumber <= end.chapterNumber; chapterNumber++) { const chapterData = book.chaptersData[chapterNumber]; if (!chapterData) { throw new Error(`Chapter not found: ${bookId} ${chapterNumber}`); } for (let verseNumber = chapterNumber === start.chapterNumber ? start.verseNumber : 1; verseNumber <= (chapterNumber === end.chapterNumber ? endVerseNumber : chapterData.length - 1); verseNumber++) { verses.push(this.getVerse({ bookId, chapterNumber, verseNumber })); } } let name = `${book.name} ${start.chapterNumber}`; if (start.chapterNumber !== end.chapterNumber) { if (start.verseNumber === 1) { name += `\u2013${end.chapterNumber}`; if (endVerseNumber !== endChapter.length - 1) { name += `:${endVerseNumber}`; } } else { name += `:${start.verseNumber}\u2013${end.chapterNumber}:${endVerseNumber}`; } } else if (start.verseNumber === end.verseNumber) { name += `:${start.verseNumber}`; } else if (start.verseNumber !== 1 || endVerseNumber !== endChapter.length - 1) { name += `:${start.verseNumber}\u2013${endVerseNumber}`; } name += ` (${this.shortName})`; return { bookId, start: { chapterNumber: start.chapterNumber, verseNumber: start.verseNumber }, end: { chapterNumber: end.chapterNumber, verseNumber: endVerseNumber }, name: name, verses }; } } exports.default = BibleVersion; //# sourceMappingURL=BibleVersion.js.map