From fd18dabcaa6c9f4abfaa800c5ddad42bbc5a5c21 Mon Sep 17 00:00:00 2001 From: Jeremy Zongker Date: Mon, 27 Jan 2025 09:58:02 -0600 Subject: [PATCH] Fixed malformed passages --- src/helpers/ApiBibleHelper.ts | 54 ++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/src/helpers/ApiBibleHelper.ts b/src/helpers/ApiBibleHelper.ts index 4eb114f..fd7757c 100644 --- a/src/helpers/ApiBibleHelper.ts +++ b/src/helpers/ApiBibleHelper.ts @@ -2,6 +2,7 @@ import axios from "axios"; import { Environment } from "./Environment"; import { BibleBook, BibleChapter, BibleTranslation, BibleVerse, BibleVerseText } from "../models"; import { ArrayHelper } from "@churchapps/apihelper"; +import { parse } from "dotenv"; export class ApiBibleHelper { static baseUrl: string = "https://api.scripture.api.bible/v1"; @@ -93,28 +94,47 @@ export class ApiBibleHelper { const result: BibleVerseText[] = []; data.data.content.forEach((c: any) => { c.items.forEach((i: any, idx: number) => { - if (i.attrs?.verseId) { - const parts = i.attrs.verseId.split("."); - const verse = parseInt(parts[parts.length - 1], 0) || 0; - if (verse > 0) { - const existing = ArrayHelper.getOne(result, "verseKey", i.attrs.verseId) - if (existing) existing.content += " " + i.text.trim(); - else { - result.push({ - translationKey, - verseKey: i.attrs.verseId, - verseNumber: verse, - content: i.text.trim(), - newParagraph: c.name === "para" && idx === 0 - }); - } - } - } + this.parseVerseItem(i, c, idx, result, translationKey); }) }); return result; } + static parseVerseItem(item: any, parent: any, index: number, result: BibleVerseText[], translationKey: string) { + if (item.attrs?.verseId) { + const parts = item.attrs.verseId.split("."); + const verse = parseInt(parts[parts.length - 1], 0) || 0; + + if (verse > 0 && item.text.trim().length > 0) { + const existing = ArrayHelper.getOne(result, "verseKey", item.attrs.verseId) + if (existing) { + const firstChar = item.text.trim().charAt(0); + const regex = /^[a-zA-Z0-9]+$/; + if (regex.test(firstChar)) existing.content += " " + item.text.trim(); + else existing.content += item.text.trim(); + } + else { + result.push({ + translationKey, + verseKey: item.attrs.verseId, + verseNumber: verse, + content: item.text.trim(), + newParagraph: parent.name === "para" && index === 0 + }); + } + } + } + + // console.log(item); + if (item.items) { + item.items.forEach((i: any, idx: number) => { + this.parseVerseItem(i, item, idx, result, translationKey); + }); + } + + } + + static async getContent(url: string) { const resp = await axios.get(url, {