ponomar-ts 0.2.0-alpha.0 → 0.2.0-alpha.1
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.
- package/dist/bible/format.d.ts +9 -0
- package/dist/bible/format.d.ts.map +1 -0
- package/dist/bible/format.js +38 -0
- package/dist/bible/format.js.map +1 -0
- package/dist/bible/index.d.ts +5 -0
- package/dist/bible/index.d.ts.map +1 -0
- package/dist/bible/index.js +8 -0
- package/dist/bible/index.js.map +1 -0
- package/dist/bible/parse.d.ts +7 -0
- package/dist/bible/parse.d.ts.map +1 -0
- package/dist/bible/parse.js +127 -0
- package/dist/bible/parse.js.map +1 -0
- package/dist/bible/types.d.ts +34 -0
- package/dist/bible/types.d.ts.map +1 -0
- package/dist/bible/types.js +4 -0
- package/dist/bible/types.js.map +1 -0
- package/dist/data/bibleBooks.d.ts +4 -0
- package/dist/data/bibleBooks.d.ts.map +1 -0
- package/dist/data/bibleBooks.js +716 -0
- package/dist/data/bibleBooks.js.map +1 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/types.d.ts +17 -0
- package/dist/data/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
- package/src/bible/format.ts +50 -0
- package/src/bible/index.ts +9 -0
- package/src/bible/parse.ts +156 -0
- package/src/bible/types.ts +40 -0
- package/src/data/bibleBooks.ts +719 -0
- package/src/data/index.ts +1 -0
- package/src/data/types.ts +19 -0
- package/src/index.ts +3 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BibleBook, BibleRef } from "./types.ts";
|
|
2
|
+
/** Look up a book by any accepted form (`Id`, `Short`, `Name`, or
|
|
3
|
+
* `Short`-with-underscores). Returns `undefined` when unknown. */
|
|
4
|
+
export declare function findBook(nameOrShort: string): BibleBook | undefined;
|
|
5
|
+
/** Format a `BibleRef` back to the upstream `<Label>_<Chapter>:<Spec>` form.
|
|
6
|
+
* Uses the original `bookLabel` from the parsed input, so
|
|
7
|
+
* `formatBibleRef(parseBibleRef(x)) === x` for every corpus reference. */
|
|
8
|
+
export declare function formatBibleRef(ref: BibleRef): string;
|
|
9
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/bible/format.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAA6B,MAAM,YAAY,CAAC;AAEjF;mEACmE;AACnE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAInE;AAED;;2EAE2E;AAC3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAMpD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Small helpers around `BIBLE_BOOKS`: alias lookup and canonical
|
|
2
|
+
// string formatting for a parsed `BibleRef`.
|
|
3
|
+
import { BIBLE_BOOK_ALIASES, BIBLE_BOOKS } from "../data/index.js";
|
|
4
|
+
/** Look up a book by any accepted form (`Id`, `Short`, `Name`, or
|
|
5
|
+
* `Short`-with-underscores). Returns `undefined` when unknown. */
|
|
6
|
+
export function findBook(nameOrShort) {
|
|
7
|
+
const id = BIBLE_BOOK_ALIASES[nameOrShort.trim()];
|
|
8
|
+
if (id === undefined)
|
|
9
|
+
return undefined;
|
|
10
|
+
return BIBLE_BOOKS[id];
|
|
11
|
+
}
|
|
12
|
+
/** Format a `BibleRef` back to the upstream `<Label>_<Chapter>:<Spec>` form.
|
|
13
|
+
* Uses the original `bookLabel` from the parsed input, so
|
|
14
|
+
* `formatBibleRef(parseBibleRef(x)) === x` for every corpus reference. */
|
|
15
|
+
export function formatBibleRef(ref) {
|
|
16
|
+
if (ref.ranges.length === 0) {
|
|
17
|
+
return `${ref.bookLabel}_${ref.chapter}`;
|
|
18
|
+
}
|
|
19
|
+
const spec = ref.ranges.map((r) => formatRange(r, ref.chapter)).join(", ");
|
|
20
|
+
return `${ref.bookLabel}_${ref.chapter}:${spec}`;
|
|
21
|
+
}
|
|
22
|
+
function formatRange(range, primaryChapter) {
|
|
23
|
+
const startStr = formatEndpoint(range.start, primaryChapter, /*explicitChapter*/ false);
|
|
24
|
+
if (range.start.chapter === range.end.chapter
|
|
25
|
+
&& range.start.verse === range.end.verse
|
|
26
|
+
&& range.start.part === range.end.part) {
|
|
27
|
+
return startStr;
|
|
28
|
+
}
|
|
29
|
+
const endStr = formatEndpoint(range.end, range.start.chapter, range.end.chapter !== range.start.chapter);
|
|
30
|
+
return `${startStr}-${endStr}`;
|
|
31
|
+
}
|
|
32
|
+
function formatEndpoint(ep, contextChapter, forceChapter) {
|
|
33
|
+
const needChapter = forceChapter || ep.chapter !== contextChapter;
|
|
34
|
+
const prefix = needChapter ? `${ep.chapter}:` : "";
|
|
35
|
+
const part = ep.part ?? "";
|
|
36
|
+
return `${prefix}${ep.verse}${part}`;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/bible/format.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,6CAA6C;AAE7C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnE;mEACmE;AACnE,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC3C,MAAM,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;2EAE2E;AAC3E,MAAM,UAAU,cAAc,CAAC,GAAa;IAC3C,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB,EAAE,cAAsB;IAC7D,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO;WACzC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK;WACrC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAC5B,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,KAAK,CAAC,OAAO,EACnB,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,CACzC,CAAC;IACF,OAAO,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CACtB,EAAiB,EACjB,cAAsB,EACtB,YAAqB;IAErB,MAAM,WAAW,GAAG,YAAY,IAAI,EAAE,CAAC,OAAO,KAAK,cAAc,CAAC;IAClE,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3B,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { BibleBook, BibleRef, VerseEndpoint, VerseRange } from "./types.ts";
|
|
2
|
+
export { BibleRefError, parseBibleRef } from "./parse.ts";
|
|
3
|
+
export { findBook, formatBibleRef } from "./format.ts";
|
|
4
|
+
export { BIBLE_BOOKS, BIBLE_BOOK_ALIASES } from "../data/index.ts";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bible/index.ts"],"names":[],"mappings":"AAKA,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Barrel for the Bible reference parser + book registry.
|
|
2
|
+
//
|
|
3
|
+
// The generated book registry lives in `src/data/bibleBooks.ts`; this
|
|
4
|
+
// folder wraps it with the runtime parser and a small formatter.
|
|
5
|
+
export { BibleRefError, parseBibleRef } from "./parse.js";
|
|
6
|
+
export { findBook, formatBibleRef } from "./format.js";
|
|
7
|
+
export { BIBLE_BOOKS, BIBLE_BOOK_ALIASES } from "../data/index.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bible/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,sEAAsE;AACtE,iEAAiE;AAGjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BibleRef } from "./types.ts";
|
|
2
|
+
export declare class BibleRefError extends Error {
|
|
3
|
+
readonly input: string;
|
|
4
|
+
constructor(input: string, message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function parseBibleRef(input: string): BibleRef;
|
|
7
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/bible/parse.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAA6B,MAAM,YAAY,CAAC;AAEtE,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAmCrD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Parse a Ponomar scripture reference string into a structured `BibleRef`.
|
|
2
|
+
//
|
|
3
|
+
// Ported from the reference-handling paths in `Ponomar/Bible.java`. The
|
|
4
|
+
// upstream string form appears in `Reading=` attributes on `<SCRIPTURE>`
|
|
5
|
+
// elements and in `Verses=` attributes on `<BIBLE>` directives inside
|
|
6
|
+
// service templates. Grammar (informal):
|
|
7
|
+
//
|
|
8
|
+
// Ref ::= BookRef "_" Chapter ( ":" VerseSpec )?
|
|
9
|
+
// BookRef ::= identifier (a book `Id`, `Short`, or `Name`)
|
|
10
|
+
// VerseSpec ::= Range ( ","+ WS* Range )*
|
|
11
|
+
// Range ::= Endpoint ( "-" Endpoint )?
|
|
12
|
+
// Endpoint ::= ( Chapter ":" )? Verse Part?
|
|
13
|
+
// Part ::= "a" | "b" | "c"
|
|
14
|
+
//
|
|
15
|
+
// The `_` is the LAST underscore in the input — the book portion may
|
|
16
|
+
// itself contain underscores (`I_Tim_4:5-8`) or spaces (`I Tim_4:5-8`).
|
|
17
|
+
import { BIBLE_BOOK_ALIASES, BIBLE_BOOKS } from "../data/index.js";
|
|
18
|
+
export class BibleRefError extends Error {
|
|
19
|
+
input;
|
|
20
|
+
constructor(input, message) {
|
|
21
|
+
super(`Invalid Bible ref ${JSON.stringify(input)}: ${message}`);
|
|
22
|
+
this.name = "BibleRefError";
|
|
23
|
+
this.input = input;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function parseBibleRef(input) {
|
|
27
|
+
const trimmed = input.trim();
|
|
28
|
+
if (trimmed.length === 0) {
|
|
29
|
+
throw new BibleRefError(input, "empty");
|
|
30
|
+
}
|
|
31
|
+
const sep = trimmed.lastIndexOf("_");
|
|
32
|
+
if (sep < 1 || sep === trimmed.length - 1) {
|
|
33
|
+
throw new BibleRefError(input, "missing `_` between book and chapter");
|
|
34
|
+
}
|
|
35
|
+
const rawBook = trimmed.slice(0, sep);
|
|
36
|
+
const rest = trimmed.slice(sep + 1);
|
|
37
|
+
const book = resolveBook(rawBook);
|
|
38
|
+
if (book === undefined) {
|
|
39
|
+
throw new BibleRefError(input, `unknown book ${JSON.stringify(rawBook)}`);
|
|
40
|
+
}
|
|
41
|
+
const colon = rest.indexOf(":");
|
|
42
|
+
const chapterStr = colon < 0 ? rest : rest.slice(0, colon);
|
|
43
|
+
const chapter = parsePositiveInt(chapterStr, input, "chapter");
|
|
44
|
+
if (chapter > book.chapters) {
|
|
45
|
+
throw new BibleRefError(input, `chapter ${chapter} out of range (${book.name} has ${book.chapters})`);
|
|
46
|
+
}
|
|
47
|
+
const ranges = colon < 0 ? [] : parseVerseSpec(rest.slice(colon + 1), chapter, input);
|
|
48
|
+
return {
|
|
49
|
+
book: book.id,
|
|
50
|
+
bookName: book.name,
|
|
51
|
+
bookShort: book.short,
|
|
52
|
+
bookLabel: rawBook.trim(),
|
|
53
|
+
chapter,
|
|
54
|
+
ranges,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function resolveBook(raw) {
|
|
58
|
+
const trimmed = raw.trim();
|
|
59
|
+
const id = BIBLE_BOOK_ALIASES[trimmed];
|
|
60
|
+
if (id !== undefined)
|
|
61
|
+
return BIBLE_BOOKS[id];
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
function parseVerseSpec(spec, primaryChapter, input) {
|
|
65
|
+
const trimmed = spec.trim();
|
|
66
|
+
if (trimmed.length === 0) {
|
|
67
|
+
throw new BibleRefError(input, "empty verse spec after `:`");
|
|
68
|
+
}
|
|
69
|
+
const rawRanges = trimmed.split(",").map((r) => r.trim()).filter((r) => r.length > 0);
|
|
70
|
+
if (rawRanges.length === 0) {
|
|
71
|
+
throw new BibleRefError(input, "no verse ranges");
|
|
72
|
+
}
|
|
73
|
+
const out = [];
|
|
74
|
+
let contextChapter = primaryChapter;
|
|
75
|
+
for (const raw of rawRanges) {
|
|
76
|
+
const range = parseRange(raw, contextChapter, input);
|
|
77
|
+
out.push(range);
|
|
78
|
+
contextChapter = range.end.chapter;
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
function parseRange(raw, contextChapter, input) {
|
|
83
|
+
const dash = raw.indexOf("-");
|
|
84
|
+
if (dash < 0) {
|
|
85
|
+
const ep = parseEndpoint(raw, contextChapter, input);
|
|
86
|
+
return { start: ep, end: ep };
|
|
87
|
+
}
|
|
88
|
+
const start = parseEndpoint(raw.slice(0, dash), contextChapter, input);
|
|
89
|
+
const end = parseEndpoint(raw.slice(dash + 1), start.chapter, input);
|
|
90
|
+
return { start, end };
|
|
91
|
+
}
|
|
92
|
+
function parseEndpoint(raw, contextChapter, input) {
|
|
93
|
+
const trimmed = raw.trim();
|
|
94
|
+
if (trimmed.length === 0) {
|
|
95
|
+
throw new BibleRefError(input, "empty endpoint");
|
|
96
|
+
}
|
|
97
|
+
const colon = trimmed.indexOf(":");
|
|
98
|
+
if (colon >= 0) {
|
|
99
|
+
const chap = parsePositiveInt(trimmed.slice(0, colon), input, "chapter");
|
|
100
|
+
return parseVersePart(trimmed.slice(colon + 1), chap, input);
|
|
101
|
+
}
|
|
102
|
+
return parseVersePart(trimmed, contextChapter, input);
|
|
103
|
+
}
|
|
104
|
+
function parseVersePart(raw, chapter, input) {
|
|
105
|
+
const m = /^(\d+)([abc])?$/.exec(raw.trim());
|
|
106
|
+
if (m === null) {
|
|
107
|
+
throw new BibleRefError(input, `invalid verse ${JSON.stringify(raw)}`);
|
|
108
|
+
}
|
|
109
|
+
const verse = Number.parseInt(m[1], 10);
|
|
110
|
+
if (!Number.isFinite(verse) || verse <= 0) {
|
|
111
|
+
throw new BibleRefError(input, `invalid verse ${JSON.stringify(raw)}`);
|
|
112
|
+
}
|
|
113
|
+
const part = m[2];
|
|
114
|
+
return {
|
|
115
|
+
chapter,
|
|
116
|
+
verse,
|
|
117
|
+
...(part !== undefined ? { part } : {}),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function parsePositiveInt(raw, input, label) {
|
|
121
|
+
const n = Number.parseInt(raw.trim(), 10);
|
|
122
|
+
if (!Number.isFinite(n) || n <= 0 || String(n) !== raw.trim()) {
|
|
123
|
+
throw new BibleRefError(input, `invalid ${label} ${JSON.stringify(raw)}`);
|
|
124
|
+
}
|
|
125
|
+
return n;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/bible/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BibleBook } from "../data/types.ts";
|
|
2
|
+
export type { BibleBook };
|
|
3
|
+
/** One endpoint of a verse range. Half-verse markers (`a` / `b` / `c`)
|
|
4
|
+
* are preserved when present. */
|
|
5
|
+
export interface VerseEndpoint {
|
|
6
|
+
readonly chapter: number;
|
|
7
|
+
readonly verse: number;
|
|
8
|
+
readonly part?: "a" | "b" | "c";
|
|
9
|
+
}
|
|
10
|
+
/** A contiguous span of verses. Single-verse spans have `start === end`
|
|
11
|
+
* (structurally equal; not the same object). */
|
|
12
|
+
export interface VerseRange {
|
|
13
|
+
readonly start: VerseEndpoint;
|
|
14
|
+
readonly end: VerseEndpoint;
|
|
15
|
+
}
|
|
16
|
+
/** One fully-parsed scripture reference from a `Reading=` / `Verses=`
|
|
17
|
+
* attribute (e.g. `"II Tim_4:5-8"`, `"Psalm_5"`, `"Rom_13:11b-14:4"`). */
|
|
18
|
+
export interface BibleRef {
|
|
19
|
+
/** Canonical book id from `BIBLE_BOOKS` (e.g. `"II_Tim"`). */
|
|
20
|
+
readonly book: string;
|
|
21
|
+
/** Book display name (e.g. `"II Timothy"`). */
|
|
22
|
+
readonly bookName: string;
|
|
23
|
+
/** Book short abbreviation (e.g. `"II Tim"`). */
|
|
24
|
+
readonly bookShort: string;
|
|
25
|
+
/** The exact book token as it appeared in the source string. Preserved
|
|
26
|
+
* so `formatBibleRef(parseBibleRef(x)) === x` for corpus inputs. */
|
|
27
|
+
readonly bookLabel: string;
|
|
28
|
+
/** Primary chapter — the one after the underscore. */
|
|
29
|
+
readonly chapter: number;
|
|
30
|
+
/** Verse ranges, in the order they appeared in the source string.
|
|
31
|
+
* Empty when the reference names only a whole chapter (e.g. `"Psalm_5"`). */
|
|
32
|
+
readonly ranges: readonly VerseRange[];
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bible/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;kCACkC;AAClC,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC;AAED;iDACiD;AACjD,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;CAC5B;AAED;2EAC2E;AAC3E,MAAM,WAAW,QAAQ;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;yEACqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;kFAC8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bible/types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,oEAAoE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bibleBooks.d.ts","sourceRoot":"","sources":["../../src/data/bibleBooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAkiBlD,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoKtD,CAAC"}
|