Bible Reference Index is a Christian Bible reference verse index and index validation system. It provides a standard way to index and reference verses in the Bible. The package is built to address the lack of a standard book abbreviation or Bible reference ID system.
To install the package via npm, run:
npm i @biblebytes/bible-reference
This table categorizes the books of the Bible into Old and New Testaments, providing their standard ID/abbreviations according to the Digital Bible Library USX Standard.
Old Testament | ID | New Testament | ID |
---|---|---|---|
Genesis | GEN |
Matthew | MAT |
Exodus | EXO |
Mark | MRK |
Leviticus | LEV |
Luke | LUK |
Numbers | NUM |
John | JHN |
Deuteronomy | DEU |
Acts | ACT |
Joshua | JOS |
Romans | ROM |
Judges | JDG |
1 Corinthians | 1CO |
Ruth | RUT |
2 Corinthians | 2CO |
1 Samuel | 1SA |
Galatians | GAL |
2 Samuel | 2SA |
Ephesians | EPH |
1 Kings | 1KI |
Philippians | PHP |
2 Kings | 2KI |
Colossians | COL |
1 Chronicles | 1CH |
1 Thessalonians | 1TH |
2 Chronicles | 2CH |
2 Thessalonians | 2TH |
Ezra | EZR |
1 Timothy | 1TI |
Nehemiah | NEH |
2 Timothy | 2TI |
Esther | EST |
Titus | TIT |
Job | JOB |
Philemon | PHM |
Psalms | PSA |
Hebrews | HEB |
Proverbs | PRO |
James | JAS |
Ecclesiastes | ECC |
1 Peter | 1PE |
Song of Songs | SNG |
2 Peter | 2PE |
Isaiah | ISA |
1 John | 1JN |
Jeremiah | JER |
2 John | 2JN |
Lamentations | LAM |
3 John | 3JN |
Ezekiel | EZK |
Jude | JUD |
Daniel | DAN |
Revelation | REV |
Hosea | HOS |
||
Joel | JOL |
||
Amos | AMO |
||
Obadiah | OBA |
||
Jonah | JON |
||
Micah | MIC |
||
Nahum | NAM |
||
Habakkuk | HAB |
||
Zephaniah | ZEP |
||
Haggai | HAG |
||
Zechariah | ZEC |
||
Malachi | MAL |
The Reference
class is the main component of this package, allowing you to
create and validate Bible references.
Reference ID strings can use a mix of delimiter between sections
(\s
, -
, .
, :
, ,
) for example, EXO 2:5-10
, EXO:2:5:10
,
and EXO-2:5-10
are all treated the same.
import { Reference, Language } from '@biblebytes/bible-reference';
// Creating a new reference
const ref1 = new Reference(Language.English);
console.log(ref1.toString()); // Output: "GEN:1:1"
// Creating a reference with a verse range
const ref2 = new Reference(Language.English, "EXO 2:5-10");
console.log(ref2.toString(true)); // Output: "Exodus 2:5-10"
// Creating a reference with mixed delimiters
const ref3 = new Reference(Language.English, "EXO:2:5:10");
console.log(ref3.toString(true)); // Output: "Exodus 2:5-10"
// Setting a new reference
ref1.Set("MAT 5:9");
console.log(ref1.toString()); // Output: "MAT:5:9"
// Setting a reference, mixed delimiters
ref1.Set("MAT.5.9");
console.log(ref1.toString()); // Output: "MAT:5:9"
class Reference {
public language: Language;
public book: Book;
public chapter: number;
public verse: number;
public chapterEnd?: number;
public verseEnd?: number;
constructor(language: Language, reference?: string);
public Set(reference: string): void;
public GetError(): string | undefined;
public toString(pretty?: boolean): string;
}
Creates an instance of Reference
. Throws error if invalid verse.
constructor(language: Language, reference?: string)
- language: The language of the reference.
- reference: (optional) The reference string to parse.
Examples:
const ref1 = new Reference(Language.English, "GEN 1:1");
const ref2 = new Reference(Language.English, "PSM 23:1-6");
const ref3 = new Reference(Language.English, "EXO 2:5-3:10");
// using any delimiter or mix of delimiters
const ref4 = new Reference(Language.English, "EXO:2:5:3:10");
const ref4 = new Reference(Language.English, "EXO-2-5-3-10");
Sets the reference details by parsing the reference string. Throws error if invalid verse.
public Set(reference: string): void
- reference: The reference string to parse.
Examples:
const ref = new Reference(Language.English);
ref.Set("MAT 5:9");
ref.Set("REV 21:3-4");
// using any delimiter or mix of delimiters
ref.Set("MAT:5:9");
ref.Set("REV:21:3-4");
Checks if the current verse is followed by the specified verse (nextVerse),
within the same chapter. Note: does not utilize chapter end or verse end;
thus GEN 1:1-5
is followed by GEN 1:2
.
public IsFollowedBy(nextVerse: Reference): boolean
- reference: The verse to check if it comes after the current verse.
- Returns: Returns
true
if the current verse is followed bynextVerse
; otherwise, it returnsfalse
.
const ref1 = new Reference(Language.English, "GEN 1:1");
const ref2 = new Reference(Language.English, "GEN 1:2");
ref1.IsFollowedBy(ref2); // returns true
const ref3 = new Reference(Language.English, "MAT 5:3");
const ref4 = new Reference(Language.English, "MAT 5:4");
const ref5 = new Reference(Language.English, "MAT 5:5");
ref3.IsFollowedBy(ref4); // returns true
ref3.IsFollowedBy(ref5); // returns false
Unpacks a verse range into it's individual verses, returning a list of verses.
For example GEN:1:1-3
can be unpacked into GEN:1:1
, GEN:1:2
, and GEN:1:3
.
References can range over both chapters and verses.
public Unpack(): Reference[]
- Returns: a list of reference verses
Examples:
const ref1 = new Reference(Language.English, `GEN:1:1-3`);
ref1.Unpack(); // ["GEN:1:1", "GEN:1:2", "GEN:1:3"]
const ref2 = new Reference(Language.English, `GEN:1:31-2:1`);
ref2.Unpack(); // ["GEN:1:31", "GEN:2:1"]
Checks if the reference is valid and returns the error as a string if the verse is invalid. For example, this ensures the verse and end of the verse range are valid.
public GetError(): string | undefined
- Returns:
undefined
if the reference is valid, otherwise returns a string.
Examples:
const ref = new Reference(Language.English);
ref.Set("MAT 5:9");
ref.GetError(); // undefined
ref.Set("MAT 5:1000");
ref.GetError(); // "Invalid verse number"
ref.Set("MAT 5:9-8");
ref.GetError(); // "Invalid verse end number"
Converts the reference to a string representation.
public toString(pretty?: boolean): string
- pretty: (optional) If
true
, returns a human-readable string. - Returns: The string representation of the reference.
Examples:
const ref = new Reference(Language.English, "MAT 5:9-10");
console.log(ref.toString()); // Output: "MAT:5:9:10"
console.log(ref.toString(true)); // Output: "MAT 5:9-10"
Retrieves book metadata by ID or name.
function GetBook(language: Language, id: number | Book): BookMetadata | undefined
- language: An enumerated language code.
- id: The ID or index of the book to retrieve.
- Returns: The metadata of the book if found, otherwise
undefined
.
Examples
const genesis = GetBook(Language.English, "GEN");
console.log(genesis);
// Output:
// {
// id: "GEN",
// name: "Genesis",
// chapters: [31, 25, ...]
// }
const exodus = GetBook(Language.English, Book.EXO);
console.log(exodus);
// Output:
// {
// id: "EXO",
// name: "Exodus",
// chapters: [22, 25, 22, ...]
// }
Retrieves book metadata for multiple IDs or names.
function GetAllBooks(language: Language, ids?: (number | Book)[] | readonly Book[]): readonly BookMetadata[]
- language: An enumerated language code.
- ids: (optional) An array of IDs or indexes of the books to retrieve.
- Returns: An array containing the metadata of the specified books.
Examples
const books = GetAllBooks(Language.English, ["GEN", "EXO"]);
console.log(books);
// Output:
// [
// {
// id: "GEN",
// name: "Genesis",
// chapters: [31, 25, 24...]
// },
// {
// id: "EXO",
// name: "Exodus",
// chapters: [22, 25, 22...]
// },
// ]
const books = GetAllBooks(Language.English, BooksOldTestament);
console.log(books);
// Output:
// [
// {
// id: "GEN",
// name: "Genesis",
// chapters: [31, 25, 24...]
// },
// {
// id: "EXO",
// name: "Exodus",
// chapters: [22, 25, 22...]
// },
// ...
// ]
Enumerates the supported languages.
enum Language {
English = "EN",
}
Enumerates the books of the Bible and assigns each book an ID, regardless of the language.
enum Book {
Genesis = "GEN",
Exodus = "EXO",
// ... other books
Revelation = "REV",
}
Books
is a constant array that contains all the books of the Bible in a
standardized format. Each book is represented by its abbreviation as defined in
the Book
enum.
const Books = [
Book.GEN,
Book.EXO,
// ... other books
Book.REV
]
BooksOldTestament
is a constant array that contains all the books of the Old
Testament. Each book is represented by its abbreviation as defined in the
Book
enum.
const BooksOldTestament = [
Book.GEN,
Book.EXO,
// ... other books
Book.MAL
]
BooksNewTestament
is a constant array that contains all the books of the New
Testament. Each book is represented by its abbreviation as defined in the
Book
enum.
const BooksNewTestament = [
Book.MAT,
Book.MRK,
// ... other books
Book.REV
]
Maps language codes to their corresponding metadata.
const Metadata: { [key in Language]: readonly BookMetadata[] } = {
[Language.English]: Metadata_EN,
};
This project is distributed under the MIT License.