-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
128 lines (110 loc) · 4.2 KB
/
index.js
File metadata and controls
128 lines (110 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/******** Feito por Lindionez Macedo ********/
const biblia = require('./data/biblia.json')
const { useFork } = require('./fork')
const { util } = require('./tools')
const normalize = (str) => str.replace(/ /g, '').toLowerCase()
const normalizeNoAccent = (str) => util.retira_acentos(str).replace(/ /g, '').toLowerCase()
/**
* Return all book
* @param {string} livro
*/
const getLivro = (livro) => {
const input = normalize(livro)
const inputNoAccent = normalizeNoAccent(livro)
let fallbackIndex = null
for (let i = 0; i < biblia.length; i++) {
const { nome, abv } = biblia[i]
const nomeNorm = normalize(nome)
const abvNorm = normalize(abv)
// 🔥 prioridade máxima: match exato COM acento
if (nomeNorm === input || abvNorm === input) return biblia[i]
// 🧯 fallback: match SEM acento
if (fallbackIndex === null) {
const nomeNoAccent = normalizeNoAccent(nome)
const abvNoAccent = normalizeNoAccent(abv)
if (nomeNoAccent === inputNoAccent || abvNoAccent === inputNoAccent) {
fallbackIndex = i
}
}
}
return fallbackIndex !== null ? biblia[fallbackIndex] : undefined
}
/**
* Return the entire requested chapter.
* @param {string} livro
* @param {string} numero
* @param {boolean} toString
*/
const getCapitulo = (livro, numero, toString = true) => {
let versiculos = ''
const capitulo = !Number(numero) && numero.includes(':') ? numero.substring(0, numero.indexOf(':')) : numero
const livro1 = getLivro(livro)
if (livro1 === undefined || capitulo === 0 || !Number(capitulo) || livro1.capitulos.length < (capitulo - 1)) return { status: false }
for (let i = 0; i < livro1.capitulos[capitulo - 1].length; i++) {
versiculos += `*${i + 1}:* ${livro1.capitulos[capitulo - 1][i]}\n`
}
return { status: true, nome: livro1.nome, capitulo: capitulo, escrita: toString ? versiculos : livro1.capitulos[capitulo - 1] }
}
/**
* Return only the requested verse.
* @param {string} livro
* @param {string} numero
*/
const getVersiculo = (livro, numero) => {
const versiculo = !Number(numero) && numero.includes(':') ? numero.substring(numero.lastIndexOf(':') + 1) : numero
const vsReplace = () => versiculo.replace(/(^|\D)0([1-9]|10)\b/g, function (match, p1, p2) {
return p1 + p2;
});
const vs = !!Number(numero) ? versiculo : vsReplace()
const capitulo = getCapitulo(livro, numero, false)
if (!capitulo.status || vs === 0 || !Number(vs) || capitulo.escrita.length < (vs - 1)) return { status: false }
return { status: true, nome: capitulo.nome, capitulo: capitulo.capitulo, versiculo: vs, escrita: capitulo.escrita[vs - 1] }
}
const getRandomLivro = () => {
const random = biblia[Math.floor(Math.random() * biblia.length)]
return random
}
/**
* Return a random chapter.
*/
const getRandomCapitulo = () => {
const livro = getRandomLivro()
const random = Math.floor(Math.random() * livro.capitulos.length)
return { status: true, nome: livro.nome, capitulo: (random + 1), escrita: livro.capitulos[random] }
}
/**
* Return a random verse.
*/
const getRandomVersiculo = () => {
const capituloJson = getRandomCapitulo()
const random = Math.floor(Math.random() * capituloJson.escrita.length)
return { status: true, nome: capituloJson.nome, capitulo: capituloJson.capitulo, versiculo: (random + 1), escrita: capituloJson.escrita[random] }
}
/**
* Returns an array of all found locations.
* @param {string} palavra
*/
const pesquisarPalavra = async (palavra) => {
return await useFork('pspalavra', palavra)
}
/**
* Returns a random verse where the word is included.
* @param {string} palavra
*/
const pesquisar = async (palavra) => {
const resultadoFinal = await useFork('palavra', palavra)
if (resultadoFinal === null) return { status: false }
const getVs = getVersiculo(resultadoFinal.livro, `${resultadoFinal.capitulo}:${resultadoFinal.versiculo}`)
return getVs
}
// const get = async () => { console.log(await getLivro('joão')); process.exit() }
// get()
module.exports = {
getLivro,
getCapitulo,
getRandomCapitulo,
getRandomVersiculo,
getVersiculo,
pesquisarPalavra,
pesquisar
}