UNPKG

@jager-ai/holy-bible-api

Version:

성경 구절 검색 및 슬래시 명령어 지원 API 모듈

353 lines (264 loc) 10.1 kB
# @mvp-factory/holy-bible-api 한국어 성경 구절 검색 및 슬래시 명령어 지원 API 모듈 ## ✨ 주요 기능 - 📖 **성경 66권 완벽 지원**: 구약 39권, 신약 27권 전체 지원 - 🔍 **성경 구절 검색**: 단일 구절 및 범위 구절 검색 - ⚡ **슬래시 명령어**: `/갈2:20`, `/요3:16-17` 형식 자동 변환 - 📚 **120+ 핵심 구절 내장**: 주요 성경 구절 즉시 사용 가능 - 🎯 **정확한 약어 매핑**: 한국 교회 표준 약어 지원 - 💾 **캐싱 시스템**: 빠른 응답을 위한 구절 캐싱 - 🌐 **API 연동 지원**: 외부 성경 API 연동 가능 - 🚀 **TypeScript 지원**: 완전한 타입 정의 ## 🚀 빠른 시작 ### 설치 ```bash npm install @mvp-factory/holy-bible-api ``` ### 기본 사용법 ```typescript import { createBibleEngine } from '@mvp-factory/holy-bible-api'; // Bible engine 생성 const bible = createBibleEngine(); // 성경 구절 검색 const result = await bible.searchVerses('요한복음 3:16'); if (result.success && result.verses) { console.log(result.verses[0].text); // "하나님이 세상을 이처럼 사랑하사..." } // 범위 구절 검색 const rangeResult = await bible.searchVerses('시편 23:1-3'); if (rangeResult.success && rangeResult.verses) { rangeResult.verses.forEach(verse => { console.log(`${verse.verse}. ${verse.text}`); }); } ``` ## 📖 슬래시 명령어 ### 자동 변환 텍스트 내의 슬래시 명령어를 자동으로 성경 구절로 변환합니다: ```typescript import { BibleVerseEngine } from '@mvp-factory/holy-bible-api'; const bible = BibleVerseEngine.getInstance(); const text = "오늘의 말씀은 /갈2:20 입니다. 또한 /요3:16도 기억하세요."; const processed = await bible.processSlashCommands(text); console.log(processed); // "오늘의 말씀은 내가 그리스도와 함께 십자가에 못 박혔나니... // - 갈라디아서 2:20 입니다. 또한 하나님이 세상을 이처럼 사랑하사... // - 요한복음 3:16도 기억하세요." ``` ### 슬래시 명령어 감지 ```typescript const commands = bible.detectSlashCommands("말씀 /롬8:28 과 /빌4:13 참조"); console.log(commands); // [ // { match: '/롬8:28', reference: '롬8:28', startIndex: 3, endIndex: 10 }, // { match: '/빌4:13', reference: '빌4:13', startIndex: 14, endIndex: 21 } // ] ``` ## 🔤 지원하는 성경책 약어 ### 구약 (39권) ``` 창(창세기), 출(출애굽기), 레(레위기), 민(민수기), 신(신명기) 수(여호수아), 삿(사사기), 룻(룻기), 삼상(사무엘상), 삼하(사무엘하) 왕상(열왕기상), 왕하(열왕기하), 대상(역대상), 대하(역대하) 스(에스라), 느(느헤미야), 에(에스더), 욥(욥기), 시(시편) 잠(잠언), 전(전도서), 아(아가), 사(이사야), 렘(예레미야) 애(예레미야 애가), 겔(에스겔), 단(다니엘), 호(호세아) 욜(요엘), 암(아모스), 옵(오바댜), 욘(요나), 미(미가) 나(나훔), 합(하박국), 습(스바냐), 학(학개), 슥(스가랴), 말(말라기) ``` ### 신약 (27권) ``` 마(마태복음), 막(마가복음), 눅(누가복음), 요(요한복음) 행(사도행전), 롬(로마서), 고전(고린도전서), 고후(고린도후서) 갈(갈라디아서), 엡(에베소서), 빌(빌립보서), 골(골로새서) 살전(데살로니가전서), 살후(데살로니가후서) 딤전(디모데전서), 딤후(디모데후서), 딛(디도서), 몬(빌레몬서) 히(히브리서), 약(야고보서), 벧전(베드로전서), 벧후(베드로후서) 요일(요한일서), 요이(요한이서), 요삼(요한삼서), 유(유다서), 계(요한계시록) ``` ## 🛠️ 고급 사용법 ### API 엔드포인트 설정 외부 성경 API를 사용하는 경우: ```typescript const bible = createBibleEngine('https://api.mybible.com/verse'); // 또는 bible.setApiEndpoint('https://api.mybible.com/verse'); ``` ### 전체 성경 데이터베이스 설정 서버 사이드에서 전체 성경 데이터를 로드하는 경우: ```typescript import { BibleVerseEngine } from '@mvp-factory/holy-bible-api'; const bible = BibleVerseEngine.getInstance(); const fullDatabase = await loadBibleDatabase(); // 31,000+ 구절 bible.setFullVerseDatabase(fullDatabase); ``` ### 검색 옵션 ```typescript const options = { includeHeadings: true, // 소제목 포함 (기본: true) maxVerses: 10, // 최대 구절 수 (기본: 20) cacheEnabled: true // 캐싱 사용 (기본: true) }; const result = await bible.searchVerses('시편 119:1-10', options); ``` ### 성경책 정보 조회 ```typescript import { getBibleBook, getBooksByTestament } from '@mvp-factory/holy-bible-api'; // 특정 책 정보 const book = getBibleBook('롬'); console.log(book); // { name: '로마서', abbr: '롬', chapters: 16, testament: 'new' } // 구약/신약별 책 목록 const oldTestament = getBooksByTestament('old'); const newTestament = getBooksByTestament('new'); ``` ### 주제별 구절 ```typescript import { BIBLE_THEMES, SEASONAL_VERSES } from '@mvp-factory/holy-bible-api'; // 책별 주제 console.log(BIBLE_THEMES['시편']); // ['찬양', '기도', '고백', '감사'] // 절기별 추천 구절 console.log(SEASONAL_VERSES['성탄절']); // ['누가복음 2:11', '마태복음 1:23', '요한복음 1:14'] ``` ## 📚 유틸리티 함수 ### 텍스트 파싱 ```typescript import { parseBibleText, extractBibleReferences, containsBibleVerse } from '@mvp-factory/holy-bible-api'; // 소제목 분리 const parsed = parseBibleText('[사랑의 하나님] 하나님은 사랑이시라'); console.log(parsed.heading); // '사랑의 하나님' console.log(parsed.text); // '하나님은 사랑이시라' // 성경 구절 추출 const refs = extractBibleReferences('오늘 말씀은 요 3:16과 롬 8:28입니다'); console.log(refs); // ['요 3:16', '롬 8:28'] // 성경 구절 포함 확인 const hasVerse = containsBibleVerse('갈라디아서 2장 20절을 보세요'); console.log(hasVerse); // true ``` ### 구절 검증 ```typescript // 유효한 구절 형식 확인 const isValid = bible.isValidReference('요한복음 3:16'); console.log(isValid); // true // 지원하는 책 목록 const books = bible.getAvailableBooks(); console.log(books); // ['창', '출', '레', ...] ``` ### 캐시 관리 ```typescript // 캐시 크기 확인 console.log(bible.getCacheSize()); // 120 (기본 핵심 구절) // 캐시 초기화 bible.clearCache(); ``` ## 🔧 TypeScript 타입 ```typescript import type { BibleVerse, BibleApiResponse, ParsedBibleReference } from '@mvp-factory/holy-bible-api'; // 성경 구절 타입 interface BibleVerse { reference: string; // "요한복음 3:16" book_full: string; // "요한복음" chapter: number; // 3 verse: number; // 16 text: string; // "하나님이 세상을..." heading?: string; // 소제목 (선택) } // API 응답 타입 interface BibleApiResponse { success: boolean; verses?: BibleVerse[]; error?: string; query?: string; } ``` ## 📋 예제 코드 ### 성경 읽기 앱 통합 ```typescript import { createBibleEngine } from '@mvp-factory/holy-bible-api'; class BibleReader { private bible = createBibleEngine(); async displayDailyVerse() { const today = new Date().toLocaleDateString('ko-KR'); const verse = await this.bible.searchVerses('요한복음 3:16'); if (verse.success && verse.verses) { console.log(`[${today}의 말씀]`); console.log(this.bible.formatVerse(verse.verses[0])); } } async processUserInput(text: string) { // 슬래시 명령어 자동 변환 return await this.bible.processSlashCommands(text); } } ``` ### 성경 검색 기능 ```typescript async function searchBible(query: string) { const bible = createBibleEngine(); // 먼저 정확한 구절 검색 let result = await bible.searchVerses(query); if (!result.success) { // 실패 시 비슷한 구절 제안 console.log('검색 실패:', result.error); console.log('제안:', result.suggestions); } else { // 검색 결과 표시 result.verses?.forEach(verse => { console.log(`${verse.reference}: ${verse.text}`); }); } } ``` ## 🐛 문제 해결 ### 구절을 찾을 수 없는 경우 ```typescript // 1. 약어가 올바른지 확인 import { BIBLE_ABBREVIATIONS } from '@mvp-factory/holy-bible-api'; console.log(BIBLE_ABBREVIATIONS); // 지원 약어 목록 // 2. 참조 형식 확인 // 올바른 형식: "책명 장:절" 또는 "책명 장:절-절" // 예: "요 3:16", "시 23:1-6" // 3. 정규화 테스트 import { normalizeBibleReference } from '@mvp-factory/holy-bible-api'; console.log(normalizeBibleReference('롬1:1')); // "로마서 1:1" ``` ### 성능 최적화 ```typescript // 1. 캐싱 활용 const options = { cacheEnabled: true }; // 2. 범위 제한 const options = { maxVerses: 10 }; // 큰 범위 검색 시 제한 // 3. 자주 사용하는 구절은 미리 로드 const commonVerses = ['요 3:16', '시 23:1', '롬 8:28']; for (const ref of commonVerses) { await bible.searchVerses(ref); } ``` ## 📦 내장 데이터 - **120+ 핵심 구절**: 자주 사용되는 주요 성경 구절 - **66권 구조 정보**: 각 책의 장 수 및 약어 - **주제별 분류**: 책별 주요 주제 태그 - **절기별 추천**: 성탄절, 부활절 등 절기별 구절 ## 🤝 기여하기 1. 이 저장소를 Fork 하세요 2. 새로운 기능 브랜치를 생성하세요 (`git checkout -b feature/AmazingFeature`) 3. 변경 사항을 커밋하세요 (`git commit -m 'Add some AmazingFeature'`) 4. 브랜치에 Push 하세요 (`git push origin feature/AmazingFeature`) 5. Pull Request를 열어주세요 ## 📄 라이센스 MIT License ## 🙏 크레딧 이 모듈은 Holy Habit 프로젝트의 성경 API 시스템에서 추출되었습니다. --- **@mvp-factory/holy-bible-api** - 한국어 성경 구절 API 모듈 📖✨