UNPKG

@allemandi/bible-validate

Version:

Fast, type-safe utilities for parsing, validating, and normalizing Bible references.

3 lines (2 loc) 11.3 kB
function e(e){if(!e)return null;var a={"1st":"1",first:"1","2nd":"2",second:"2","3rd":"3",third:"3",iii:"3",ii:"2",i:"1"},s=e.trim().toLowerCase().replace(/\s+/g," "),r=(s=s.replace(/^(?:the\s+)?(?:(book|epistle|gospel|letter)\s+(?:according\s+)?(?:to|for|of)(?:\s+the)?\s*)?/,"")).match(/^(first|1st|second|2nd|third|3rd|iii|ii|i)\b/);if(r){var o=r[0];o in a&&(s=a[o]+" "+s.slice(o.length).trim())}return s.replace(/[^a-z0-9]/g,"")}function a(e){if(!e)return null;var a=e.toLowerCase().replace(/[–—]/g,"-").replace(/\bto\b/g,"-").replace(/[a-z.,]/g,"").replace(/\s+/g," ").trim().split(/[\s\-:]+/).filter(Boolean).map(function(e){return parseInt(e,10)}).filter(function(e){return!isNaN(e)});if(0===a.length)return null;switch(a.length){case 1:return{chapter:a[0],verseStart:null,verseEnd:null};case 2:return{chapter:a[0],verseStart:a[1],verseEnd:null};default:return{chapter:a[0],verseStart:a[1],verseEnd:a[2]}}}function s(e){if(!e||"string"!=typeof e)return[null,null];var a=e.trim().replace(/\s+/g," "),s=a.match(/^([\d\w\s.']+?)\s*(?=\b(ch(?:apter)?|chap\.?)\b|\d)/i);return s?[s[1].trim(),a.slice(s[0].length).trim()]:[a,""]}function r(r){var o,t,n;if(!r||"string"!=typeof r)return null;var l=s(r.trim().replace(/\s+/g," ")),i=l[0],h=l[1],c=i&&e(i);if(!c)return{book:null,chapter:null,verseStart:null,verseEnd:null};var u=h?a(h):null;return{book:c,chapter:null!=(o=null==u?void 0:u.chapter)?o:null,verseStart:null!=(t=null==u?void 0:u.verseStart)?t:null,verseEnd:null!=(n=null==u?void 0:u.verseEnd)?n:null}}var o=[{book:"Genesis",aliases:["Gen","Ge","Gn"],chapters:[31,25,24,26,32,22,24,22,29,32,32,20,18,24,21,16,27,33,38,18,34,24,20,67,34,35,46,22,35,43,55,32,20,31,29,43,36,30,23,23,57,38,34,34,28,34,31,22,33,26]},{book:"Exodus",aliases:["Ex","Exod","Exo"],chapters:[22,25,22,31,23,30,25,32,35,29,10,51,22,31,27,36,16,27,25,26,36,31,33,18,40,37,21,43,46,38,18,35,23,35,35,38,29,31,43,38]},{book:"Leviticus",aliases:["Lev","Le","Lv"],chapters:[17,16,17,35,19,30,38,36,24,20,47,8,59,57,33,34,16,30,37,27,24,33,44,23,55,46,34]},{book:"Numbers",aliases:["Num","Nu","Nm","Nb"],chapters:[54,34,51,49,31,27,89,26,23,36,35,16,33,45,41,50,13,32,22,29,35,41,30,25,18,65,23,31,40,16,54,42,56,29,34,13]},{book:"Deuteronomy",aliases:["Deut","De","Dt"],chapters:[46,37,29,49,33,25,26,20,29,22,32,32,18,29,23,22,20,22,21,20,23,30,25,22,19,19,26,68,29,20,30,52,29,12]},{book:"Joshua",aliases:["Josh","Jos","Jsh"],chapters:[18,24,17,24,15,27,26,35,27,43,23,24,33,15,63,10,18,28,51,9,45,34,16,33]},{book:"Judges",aliases:["Judg","Jdgs","Jdg","Jg"],chapters:[36,23,31,24,31,40,25,35,57,18,40,15,25,20,20,31,13,31,30,48,25]},{book:"Ruth",aliases:["Rth","Ru"],chapters:[22,23,18,22]},{book:"1 Samuel",aliases:["1 Sam","1 Sm","1 Sa","1 S"],chapters:[28,36,21,22,12,21,17,22,27,27,15,25,23,52,35,23,58,30,24,42,15,23,29,22,44,25,12,25,11,31,13]},{book:"2 Samuel",aliases:["2 Sam","2 Sm","2 Sa","2 S"],chapters:[27,32,39,12,25,23,29,18,13,19,27,31,39,33,37,23,29,33,43,26,22,51,39,25]},{book:"1 Kings",aliases:["1 Kgs","1 Kin","1 Ki","1 K"],chapters:[53,46,28,34,18,38,51,66,28,29,43,33,34,31,34,34,24,46,21,43,29,53]},{book:"2 Kings",aliases:["2 Kgs","2 Kin","2 Ki","2 K"],chapters:[18,25,27,44,27,33,20,29,37,36,21,21,25,29,38,20,41,37,37,21,26,20,37,20,30]},{book:"1 Chronicles",aliases:["1 Chron","1 Chr","1 Ch"],chapters:[54,55,24,43,26,81,40,40,44,14,47,40,14,17,29,43,27,17,19,8,30,19,32,31,31,32,34,21,30]},{book:"2 Chronicles",aliases:["2 Chron","2 Chr","2 Ch"],chapters:[17,18,17,22,14,42,22,18,31,19,23,16,22,15,19,14,19,34,11,37,20,12,21,27,28,23,9,27,36,27,21,33,25,33,27,23]},{book:"Ezra",aliases:["Ezr","Ez"],chapters:[11,70,13,24,17,22,28,36,15,44]},{book:"Nehemiah",aliases:["Neh","Ne"],chapters:[11,20,32,23,19,19,73,18,38,39,36,47,31]},{book:"Esther",aliases:["Est","Esth","Es"],chapters:[22,23,15,17,14,14,10,17,32,3]},{book:"Job",aliases:["Jb"],chapters:[22,13,26,21,27,30,21,22,35,22,20,25,28,22,35,22,16,21,29,29,34,30,17,25,6,14,23,28,25,31,40,22,33,37,16,33,24,41,30,24,34,17]},{book:"Psalms",aliases:["Ps","Psalm","Pslm","Psa","Psm","Pss"],chapters:[6,12,8,8,12,10,17,9,20,18,7,8,6,7,5,11,15,50,14,9,13,31,6,10,22,12,14,9,11,12,24,11,22,22,28,12,40,22,13,17,13,11,5,26,17,11,9,14,20,23,19,9,6,7,23,13,11,11,17,12,8,12,11,10,13,20,7,35,36,5,24,20,28,23,10,12,20,72,13,19,16,8,18,12,13,17,7,18,52,17,16,15,5,23,11,13,12,9,9,5,8,28,22,35,45,48,43,13,31,7,10,10,9,8,18,19,2,29,176,7,8,9,4,8,5,6,5,6,8,8,3,18,3,3,21,26,9,8,24,13,10,7,12,15,21,10,20,14,9,6]},{book:"Proverbs",aliases:["Prov","Pro","Prv","Pr"],chapters:[33,22,35,27,23,35,27,36,18,32,31,28,25,35,33,33,28,24,29,30,31,29,35,34,28,28,27,28,27,33,31]},{book:"Ecclesiastes",aliases:["Eccles","Eccle","Ecc","Ec","Qoh"],chapters:[18,26,22,16,20,12,29,17,18,20,10,14]},{book:"Song of Solomon",aliases:["Song","Song of Songs","Sos","So","Canticle of Canticles","Canticles","Cant"],chapters:[17,17,11,16,16,13,13,14]},{book:"Isaiah",aliases:["Isa","Is"],chapters:[31,22,26,6,30,13,25,22,21,34,16,6,22,32,9,14,14,7,25,6,17,25,18,23,12,21,13,29,24,33,9,20,24,17,10,22,38,22,8,31,29,25,28,28,25,13,15,22,26,11,23,15,12,17,13,12,21,14,21,22,11,12,19,12,25,24]},{book:"Jeremiah",aliases:["Jer","Je","Jr"],chapters:[19,37,25,31,31,30,34,22,26,25,23,17,27,22,21,21,27,23,15,18,14,30,40,10,38,24,22,17,32,24,40,44,26,22,19,32,21,28,18,16,18,22,13,30,5,28,7,47,39,46,64,34]},{book:"Lamentations",aliases:["Lam","La"],chapters:[22,22,66,22,22]},{book:"Ezekiel",aliases:["Ezek","Eze","Ezk"],chapters:[28,10,27,17,17,14,27,18,11,22,25,28,23,23,8,63,24,32,14,49,32,31,49,27,17,21,36,26,21,26,18,32,33,31,15,38,28,23,29,49,26,20,27,31,25,24,23,35]},{book:"Daniel",aliases:["Dan","Da","Dn"],chapters:[21,49,30,37,31,28,28,27,27,21,45,13]},{book:"Hosea",aliases:["Hos","Ho"],chapters:[11,23,5,19,15,11,16,14,17,15,12,14,16,9]},{book:"Joel",aliases:["Jl"],chapters:[20,32,21]},{book:"Amos",aliases:["Am"],chapters:[15,16,15,13,27,14,17,14,15]},{book:"Obadiah",aliases:["Obad","Ob"],chapters:[21]},{book:"Jonah",aliases:["Jnh","Jon"],chapters:[17,10,10,11]},{book:"Micah",aliases:["Mic","Mc"],chapters:[16,13,12,13,15,16,20]},{book:"Nahum",aliases:["Nah","Na"],chapters:[15,13,19]},{book:"Habakkuk",aliases:["Hab","Hb"],chapters:[17,20,19]},{book:"Zephaniah",aliases:["Zeph","Zep","Zp"],chapters:[18,15,20]},{book:"Haggai",aliases:["Hag","Hg"],chapters:[15,23]},{book:"Zechariah",aliases:["Zech","Zec","Zc"],chapters:[21,13,10,14,11,15,14,23,17,12,17,14,9,21]},{book:"Malachi",aliases:["Mal","Ml"],chapters:[14,17,18,6]},{book:"Matthew",aliases:["Matt","Mt"],chapters:[25,23,17,25,48,34,29,34,38,42,30,50,58,36,39,28,27,35,30,34,46,46,39,51,46,75,66,20]},{book:"Mark",aliases:["Mrk","Mar","Mk","Mr"],chapters:[45,28,35,41,43,56,37,38,50,52,33,44,37,72,47,20]},{book:"Luke",aliases:["Luk","Lk"],chapters:[80,52,38,44,39,49,50,56,62,42,54,59,35,35,32,31,37,43,48,47,38,71,56,53]},{book:"John",aliases:["Joh","Jhn","Jn"],chapters:[51,25,36,54,47,71,53,59,41,42,57,50,38,31,27,33,26,40,42,31,25]},{book:"Acts",aliases:["Acts","Ac"],chapters:[26,47,26,37,42,15,60,40,43,48,30,25,52,28,41,40,34,28,41,38,40,30,35,27,27,32,44,31]},{book:"Romans",aliases:["Rom","Ro","Rm"],chapters:[32,29,31,25,21,23,25,39,33,21,36,21,14,23,33,27]},{book:"1 Corinthians",aliases:["1 Cor","1 Co"],chapters:[31,16,23,21,13,20,40,13,27,33,34,31,13,40,58,24]},{book:"2 Corinthians",aliases:["2 Cor","2 Co"],chapters:[24,17,18,18,21,18,16,24,15,18,33,21,14]},{book:"Galatians",aliases:["Gal","Ga"],chapters:[24,21,29,31,26,18]},{book:"Ephesians",aliases:["Ephes","Eph"],chapters:[23,22,21,32,33,24]},{book:"Philippians",aliases:["Phil","Php","Pp"],chapters:[30,30,21,23]},{book:"Colossians",aliases:["Col","Co"],chapters:[29,23,25,18]},{book:"1 Thessalonians",aliases:["1 Thess","1 Thes","1 Th"],chapters:[10,20,13,18,28]},{book:"2 Thessalonians",aliases:["2 Thess","2 Thes","2 Th"],chapters:[12,17,18]},{book:"1 Timothy",aliases:["1 Tim","1 Ti"],chapters:[20,15,16,16,25,21]},{book:"2 Timothy",aliases:["2 Tim","2 Ti"],chapters:[18,26,17,22]},{book:"Titus",aliases:["Tit","Ti"],chapters:[16,15,15]},{book:"Philemon",aliases:["Philem","Phm","Pm"],chapters:[25]},{book:"Hebrews",aliases:["Heb"],chapters:[14,18,19,16,14,20,28,13,28,39,40,29,25]},{book:"James",aliases:["Jas","Jm"],chapters:[27,26,18,17,20]},{book:"1 Peter",aliases:["1 Pet","1 Pe","1 Pt","1 P"],chapters:[25,25,22,19,14]},{book:"2 Peter",aliases:["2 Pet","2 Pe","2 Pt","2 P"],chapters:[21,22,18]},{book:"1 John",aliases:["1 Jn","1 Jo","1 Joh","1 Jhn","1 J"],chapters:[10,29,24,21,21]},{book:"2 John",aliases:["2 Jn","2 Jo","2 Joh","2 Jhn","2 J"],chapters:[13]},{book:"3 John",aliases:["3 Jn","3 Jo","3 Joh","3 Jhn","3 J"],chapters:[15]},{book:"Jude",aliases:["Jud","Jd"],chapters:[25]},{book:"Revelation",aliases:["Rev","Re","Revelation to John"],chapters:[20,29,22,11,14,17,17,13,21,11,19,17,18,20,8,21,18,24,21,15,27,21]}],t=new Map;function n(a){if(!a)return null;var s=e(a);if(t.has(s))return t.get(s);var r=o.find(function(a){return e(a.book)===s||a.aliases.map(e).includes(s)})||null;return t.set(s,r),r}function l(e){var a=n(e);return a?a.chapters.length:null}function i(e,a){var s=n(e);return!s||a<1||a>s.chapters.length?null:s.chapters[a-1]}function h(){return o.map(function(e){return e.book})}function c(a,s){var r=(void 0===s?{}:s).normalized,o=void 0!==r&&r,t=n(a);return t?o?[t.book].concat(t.aliases).map(e).filter(function(e){return null!=e}):[t.book].concat(t.aliases):null}function u(e){var a=l(e);return null==a?null:Array.from({length:a},function(e,a){return a+1})}function p(e,a){var s=i(e,a);return null==s?null:Array.from({length:s},function(e,a){return a+1})}function b(e){return"string"==typeof e&&""!==e.trim()&&null!==n(e)}function k(e,a){var s=n(e);return!!s&&a>=1&&a<=s.chapters.length}function v(e,a,s,r){void 0===r&&(r=null);var o=n(e);if(!o||!k(e,a))return!1;var t=o.chapters[a-1];return!(s<1||s>t||null!==r&&(r<s||r>t))}function f(){return f=Object.assign?Object.assign.bind():function(e){for(var a=1;a<arguments.length;a++){var s=arguments[a];for(var r in s)({}).hasOwnProperty.call(s,r)&&(e[r]=s[r])}return e},f.apply(null,arguments)}function m(e){var a=e.book,s=e.chapter,r=e.verseStart,o=e.verseEnd;return a&&s?null==r?a+" "+s:null==o||o===r?a+" "+s+":"+r:a+" "+s+":"+r+"-"+o:a||""}function d(e,a){var s,o,t,l=(void 0===a?{}:a).structured,i=void 0!==l&&l,h=function(a){return{isValid:!1,error:a,original:e}};if("string"!=typeof e||!e.trim())return h("Empty or invalid input");var c=r(e);if(null==c||!c.book)return h("Could not parse reference");var u=n(c.book);if(!u)return h("Invalid book name");var p=null!=(s=c.chapter)?s:null,b=null!=(o=c.verseStart)?o:null,k=null!=(t=c.verseEnd)?t:null;if(null===p||null===b)return h("Missing chapter or verse");if(!v(u.book,p,b,k))return h("Invalid chapter or verse");var d={isValid:!0,formatted:m({book:u.book,chapter:p,verseStart:b,verseEnd:k}),error:null,original:e};return i?f({},d,{book:u.book,chapter:p,verseStart:b,verseEnd:k}):d}export{s as extractBookAndRange,m as formatReference,n as getBook,l as getChapterCount,i as getVerseCount,b as isValidBook,k as isValidChapter,v as isValidReference,c as listAliases,h as listBibleBooks,u as listChapters,p as listVerses,e as normalizeBookName,d as parseAndValidateReference,r as parseBibleReference,a as parseChapterVerse}; //# sourceMappingURL=index.module.js.map