@helloao/tools 0.0.6 → 0.0.9
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/cjs/generation/api.cjs +240 -0
- package/dist/cjs/generation/api.cjs.map +7 -0
- package/dist/cjs/generation/audio.cjs +83 -0
- package/dist/cjs/generation/audio.cjs.map +7 -0
- package/dist/cjs/generation/book-order.cjs +508 -0
- package/dist/cjs/generation/book-order.cjs.map +7 -0
- package/dist/cjs/generation/common-types.cjs +17 -0
- package/dist/cjs/generation/common-types.cjs.map +7 -0
- package/dist/cjs/generation/dataset.cjs +158 -0
- package/dist/cjs/generation/dataset.cjs.map +7 -0
- package/dist/cjs/generation/index.cjs +51 -0
- package/dist/cjs/generation/index.cjs.map +7 -0
- package/dist/cjs/index.cjs +45 -0
- package/dist/cjs/index.cjs.map +7 -0
- package/dist/cjs/parser/codex-parser.cjs +176 -0
- package/dist/cjs/parser/codex-parser.cjs.map +7 -0
- package/dist/cjs/parser/index.cjs +48 -0
- package/dist/cjs/parser/index.cjs.map +7 -0
- package/dist/cjs/parser/iterators.cjs +204 -0
- package/dist/cjs/parser/iterators.cjs.map +7 -0
- package/dist/cjs/parser/types.cjs +17 -0
- package/dist/cjs/parser/types.cjs.map +7 -0
- package/dist/cjs/parser/usfm-parser.cjs +791 -0
- package/dist/cjs/parser/usfm-parser.cjs.map +7 -0
- package/dist/cjs/parser/usx-parser.cjs +471 -0
- package/dist/cjs/parser/usx-parser.cjs.map +7 -0
- package/dist/cjs/utils.cjs +85 -0
- package/dist/cjs/utils.cjs.map +7 -0
- package/dist/esm/generation/api.js +198 -0
- package/dist/esm/generation/api.js.map +7 -0
- package/dist/esm/generation/audio.js +53 -0
- package/dist/esm/generation/audio.js.map +7 -0
- package/dist/esm/generation/book-order.js +478 -0
- package/dist/esm/generation/book-order.js.map +7 -0
- package/dist/esm/generation/common-types.js +2 -0
- package/dist/esm/generation/common-types.js.map +7 -0
- package/dist/esm/generation/dataset.js +132 -0
- package/dist/esm/generation/dataset.js.map +7 -0
- package/dist/esm/generation/index.js +8 -0
- package/dist/esm/generation/index.js.map +7 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/parser/codex-parser.js +144 -0
- package/dist/esm/parser/codex-parser.js.map +7 -0
- package/dist/esm/parser/index.js +8 -0
- package/dist/esm/parser/index.js.map +7 -0
- package/dist/esm/parser/iterators.js +152 -0
- package/dist/esm/parser/iterators.js.map +7 -0
- package/dist/esm/parser/types.js +2 -0
- package/dist/esm/parser/types.js.map +7 -0
- package/dist/esm/parser/usfm-parser.js +749 -0
- package/dist/esm/parser/usfm-parser.js.map +7 -0
- package/dist/esm/parser/usx-parser.js +447 -0
- package/dist/esm/parser/usx-parser.js.map +7 -0
- package/dist/esm/utils.js +51 -0
- package/dist/esm/utils.js.map +7 -0
- package/{generation → dist/types/generation}/api.d.ts +2 -2
- package/{generation → dist/types/generation}/audio.d.ts +1 -1
- package/{generation → dist/types/generation}/dataset.d.ts +1 -1
- package/dist/types/generation/index.d.ts +7 -0
- package/dist/types/index.d.ts +5 -0
- package/{parser → dist/types/parser}/codex-parser.d.ts +1 -1
- package/dist/types/parser/index.d.ts +7 -0
- package/{parser → dist/types/parser}/usfm-parser.d.ts +1 -1
- package/{parser → dist/types/parser}/usx-parser.d.ts +2 -2
- package/package.json +25 -3
- package/generation/api.js +0 -187
- package/generation/api.spec.d.ts +0 -2
- package/generation/api.spec.js +0 -620
- package/generation/audio.js +0 -60
- package/generation/audio.spec.d.ts +0 -2
- package/generation/audio.spec.js +0 -36
- package/generation/book-order.js +0 -494
- package/generation/book-order.spec.d.ts +0 -2
- package/generation/book-order.spec.js +0 -8
- package/generation/common-types.js +0 -2
- package/generation/dataset.js +0 -106
- package/generation/index.d.ts +0 -7
- package/generation/index.js +0 -38
- package/index.d.ts +0 -5
- package/index.js +0 -32
- package/parser/codex-parser.js +0 -160
- package/parser/codex-parser.spec.d.ts +0 -2
- package/parser/codex-parser.spec.js +0 -645
- package/parser/index.d.ts +0 -7
- package/parser/index.js +0 -35
- package/parser/iterators.js +0 -222
- package/parser/iterators.spec.d.ts +0 -2
- package/parser/iterators.spec.js +0 -174
- package/parser/types.js +0 -2
- package/parser/usfm-parser.js +0 -840
- package/parser/usfm-parser.spec.d.ts +0 -2
- package/parser/usfm-parser.spec.js +0 -1593
- package/parser/usx-parser.js +0 -486
- package/parser/usx-parser.spec.d.ts +0 -2
- package/parser/usx-parser.spec.js +0 -1260
- package/utils.js +0 -73
- package/utils.spec.d.ts +0 -2
- package/utils.spec.js +0 -42
- /package/{generation → dist/types/generation}/book-order.d.ts +0 -0
- /package/{generation → dist/types/generation}/common-types.d.ts +0 -0
- /package/{parser → dist/types/parser}/iterators.d.ts +0 -0
- /package/{parser → dist/types/parser}/types.d.ts +0 -0
- /package/{utils.d.ts → dist/types/utils.d.ts} +0 -0
package/generation/api.spec.js
DELETED
|
@@ -1,620 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const api_1 = require("./api");
|
|
7
|
-
const _01GENBSB_usfm_1 = __importDefault(require("../../../bible/bsb/01GENBSB.usfm"));
|
|
8
|
-
const _02EXOBSB_usfm_1 = __importDefault(require("../../../bible/bsb/02EXOBSB.usfm"));
|
|
9
|
-
const _131CHBSB_usfm_1 = __importDefault(require("../../../bible/bsb/131CHBSB.usfm"));
|
|
10
|
-
const dataset_1 = require("./dataset");
|
|
11
|
-
const linkedom_1 = require("linkedom");
|
|
12
|
-
describe('replaceSpacesWithUnderscores()', () => {
|
|
13
|
-
const cases = [
|
|
14
|
-
['Hello World', 'Hello_World'],
|
|
15
|
-
['Hello World 2', 'Hello_World_2'],
|
|
16
|
-
];
|
|
17
|
-
it.each(cases)('should replace spaces with underscores', (input, expected) => {
|
|
18
|
-
expect((0, api_1.replaceSpacesWithUnderscores)(input)).toBe(expected);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe('generateApiForDataset()', () => {
|
|
22
|
-
it('should output a file tree', () => {
|
|
23
|
-
let translation1 = {
|
|
24
|
-
id: 'bsb',
|
|
25
|
-
name: 'Berean Standard Bible',
|
|
26
|
-
englishName: 'Berean Standard Bible',
|
|
27
|
-
shortName: 'BSB',
|
|
28
|
-
language: 'eng',
|
|
29
|
-
direction: 'ltr',
|
|
30
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
31
|
-
website: 'https://berean.bible',
|
|
32
|
-
};
|
|
33
|
-
let inputFiles = [
|
|
34
|
-
{
|
|
35
|
-
fileType: 'usfm',
|
|
36
|
-
metadata: {
|
|
37
|
-
translation: translation1,
|
|
38
|
-
},
|
|
39
|
-
content: firstXLines(_01GENBSB_usfm_1.default, 13),
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
fileType: 'usfm',
|
|
43
|
-
metadata: {
|
|
44
|
-
translation: translation1,
|
|
45
|
-
},
|
|
46
|
-
content: firstXLines(_02EXOBSB_usfm_1.default, 14),
|
|
47
|
-
},
|
|
48
|
-
];
|
|
49
|
-
const dataset = (0, dataset_1.generateDataset)(inputFiles, new linkedom_1.DOMParser());
|
|
50
|
-
const generated = (0, api_1.generateApiForDataset)(dataset);
|
|
51
|
-
const files = (0, api_1.generateFilesForApi)(generated);
|
|
52
|
-
const tree = fileTree(files);
|
|
53
|
-
const expectedTranslation = {
|
|
54
|
-
id: 'bsb',
|
|
55
|
-
name: 'Berean Standard Bible',
|
|
56
|
-
englishName: 'Berean Standard Bible',
|
|
57
|
-
shortName: 'BSB',
|
|
58
|
-
language: 'eng',
|
|
59
|
-
textDirection: 'ltr',
|
|
60
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
61
|
-
website: 'https://berean.bible',
|
|
62
|
-
availableFormats: ['json'],
|
|
63
|
-
listOfBooksApiLink: '/api/bsb/books.json',
|
|
64
|
-
numberOfBooks: 2,
|
|
65
|
-
totalNumberOfChapters: 2,
|
|
66
|
-
totalNumberOfVerses: 4,
|
|
67
|
-
languageName: 'English',
|
|
68
|
-
languageEnglishName: 'English',
|
|
69
|
-
};
|
|
70
|
-
expect(tree).toEqual({
|
|
71
|
-
'/api/available_translations.json': {
|
|
72
|
-
translations: [expectedTranslation],
|
|
73
|
-
},
|
|
74
|
-
'/api/bsb/books.json': {
|
|
75
|
-
translation: expectedTranslation,
|
|
76
|
-
books: [
|
|
77
|
-
{
|
|
78
|
-
id: 'GEN',
|
|
79
|
-
name: 'Genesis',
|
|
80
|
-
commonName: 'Genesis',
|
|
81
|
-
title: 'Genesis',
|
|
82
|
-
order: 1,
|
|
83
|
-
numberOfChapters: 1,
|
|
84
|
-
totalNumberOfVerses: 2,
|
|
85
|
-
firstChapterApiLink: '/api/bsb/GEN/1.json',
|
|
86
|
-
lastChapterApiLink: '/api/bsb/GEN/1.json',
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
id: 'EXO',
|
|
90
|
-
name: 'Exodus',
|
|
91
|
-
commonName: 'Exodus',
|
|
92
|
-
title: 'Exodus',
|
|
93
|
-
order: 2,
|
|
94
|
-
numberOfChapters: 1,
|
|
95
|
-
totalNumberOfVerses: 2,
|
|
96
|
-
firstChapterApiLink: '/api/bsb/EXO/1.json',
|
|
97
|
-
lastChapterApiLink: '/api/bsb/EXO/1.json',
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
'/api/bsb/GEN/1.json': {
|
|
102
|
-
translation: expectedTranslation,
|
|
103
|
-
book: {
|
|
104
|
-
id: 'GEN',
|
|
105
|
-
name: 'Genesis',
|
|
106
|
-
commonName: 'Genesis',
|
|
107
|
-
title: 'Genesis',
|
|
108
|
-
order: 1,
|
|
109
|
-
numberOfChapters: 1,
|
|
110
|
-
totalNumberOfVerses: 2,
|
|
111
|
-
firstChapterApiLink: '/api/bsb/GEN/1.json',
|
|
112
|
-
lastChapterApiLink: '/api/bsb/GEN/1.json',
|
|
113
|
-
},
|
|
114
|
-
thisChapterLink: '/api/bsb/GEN/1.json',
|
|
115
|
-
thisChapterAudioLinks: {},
|
|
116
|
-
nextChapterApiLink: '/api/bsb/EXO/1.json',
|
|
117
|
-
nextChapterAudioLinks: {},
|
|
118
|
-
previousChapterApiLink: null,
|
|
119
|
-
previousChapterAudioLinks: null,
|
|
120
|
-
numberOfVerses: 2,
|
|
121
|
-
chapter: {
|
|
122
|
-
number: 1,
|
|
123
|
-
content: [
|
|
124
|
-
{
|
|
125
|
-
type: 'heading',
|
|
126
|
-
content: ['The Creation'],
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
type: 'line_break',
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
type: 'verse',
|
|
133
|
-
number: 1,
|
|
134
|
-
content: [
|
|
135
|
-
'In the beginning God created the heavens and the earth.',
|
|
136
|
-
],
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
type: 'line_break',
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
type: 'verse',
|
|
143
|
-
number: 2,
|
|
144
|
-
content: [
|
|
145
|
-
'Now the earth was formless and void, and darkness was over the surface of the deep. And the Spirit of God was hovering over the surface of the waters.',
|
|
146
|
-
],
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
footnotes: [],
|
|
150
|
-
},
|
|
151
|
-
},
|
|
152
|
-
'/api/bsb/EXO/1.json': {
|
|
153
|
-
translation: expectedTranslation,
|
|
154
|
-
book: {
|
|
155
|
-
id: 'EXO',
|
|
156
|
-
name: 'Exodus',
|
|
157
|
-
commonName: 'Exodus',
|
|
158
|
-
title: 'Exodus',
|
|
159
|
-
order: 2,
|
|
160
|
-
numberOfChapters: 1,
|
|
161
|
-
totalNumberOfVerses: 2,
|
|
162
|
-
firstChapterApiLink: '/api/bsb/EXO/1.json',
|
|
163
|
-
lastChapterApiLink: '/api/bsb/EXO/1.json',
|
|
164
|
-
},
|
|
165
|
-
thisChapterLink: '/api/bsb/EXO/1.json',
|
|
166
|
-
thisChapterAudioLinks: {},
|
|
167
|
-
nextChapterApiLink: null,
|
|
168
|
-
nextChapterAudioLinks: null,
|
|
169
|
-
previousChapterApiLink: '/api/bsb/GEN/1.json',
|
|
170
|
-
previousChapterAudioLinks: {},
|
|
171
|
-
numberOfVerses: 2,
|
|
172
|
-
chapter: {
|
|
173
|
-
number: 1,
|
|
174
|
-
content: [
|
|
175
|
-
{
|
|
176
|
-
type: 'heading',
|
|
177
|
-
content: ['The Israelites Multiply in Egypt'],
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
type: 'line_break',
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
type: 'verse',
|
|
184
|
-
number: 1,
|
|
185
|
-
content: [
|
|
186
|
-
'These are the names of the sons of Israel who went to Egypt with Jacob, each with his family:',
|
|
187
|
-
],
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
type: 'line_break',
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
type: 'verse',
|
|
194
|
-
number: 2,
|
|
195
|
-
content: ['Reuben, Simeon, Levi, and Judah;'],
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
footnotes: [],
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
});
|
|
202
|
-
// expect(availableTranslations).toEqual({
|
|
203
|
-
// translations: [
|
|
204
|
-
// expectedTranslation
|
|
205
|
-
// ]
|
|
206
|
-
// });
|
|
207
|
-
});
|
|
208
|
-
it('should use the given path prefix', () => {
|
|
209
|
-
let translation1 = {
|
|
210
|
-
id: 'bsb',
|
|
211
|
-
name: 'Berean Standard Bible',
|
|
212
|
-
englishName: 'Berean Standard Bible',
|
|
213
|
-
shortName: 'BSB',
|
|
214
|
-
language: 'eng',
|
|
215
|
-
direction: 'ltr',
|
|
216
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
217
|
-
website: 'https://berean.bible',
|
|
218
|
-
};
|
|
219
|
-
let inputFiles = [
|
|
220
|
-
{
|
|
221
|
-
fileType: 'usfm',
|
|
222
|
-
metadata: {
|
|
223
|
-
translation: translation1,
|
|
224
|
-
},
|
|
225
|
-
content: firstXLines(_01GENBSB_usfm_1.default, 13),
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
fileType: 'usfm',
|
|
229
|
-
metadata: {
|
|
230
|
-
translation: translation1,
|
|
231
|
-
},
|
|
232
|
-
content: firstXLines(_02EXOBSB_usfm_1.default, 14),
|
|
233
|
-
},
|
|
234
|
-
];
|
|
235
|
-
const dataset = (0, dataset_1.generateDataset)(inputFiles, new linkedom_1.DOMParser());
|
|
236
|
-
const generated = (0, api_1.generateApiForDataset)(dataset, {
|
|
237
|
-
pathPrefix: '/hello',
|
|
238
|
-
});
|
|
239
|
-
const files = (0, api_1.generateFilesForApi)(generated);
|
|
240
|
-
const tree = fileTree(files);
|
|
241
|
-
const expectedTranslation = {
|
|
242
|
-
id: 'bsb',
|
|
243
|
-
name: 'Berean Standard Bible',
|
|
244
|
-
englishName: 'Berean Standard Bible',
|
|
245
|
-
shortName: 'BSB',
|
|
246
|
-
language: 'eng',
|
|
247
|
-
textDirection: 'ltr',
|
|
248
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
249
|
-
website: 'https://berean.bible',
|
|
250
|
-
availableFormats: ['json'],
|
|
251
|
-
listOfBooksApiLink: '/hello/api/bsb/books.json',
|
|
252
|
-
numberOfBooks: 2,
|
|
253
|
-
totalNumberOfChapters: 2,
|
|
254
|
-
totalNumberOfVerses: 4,
|
|
255
|
-
languageName: 'English',
|
|
256
|
-
languageEnglishName: 'English',
|
|
257
|
-
};
|
|
258
|
-
expect(tree).toEqual({
|
|
259
|
-
'/hello/api/available_translations.json': {
|
|
260
|
-
translations: [expectedTranslation],
|
|
261
|
-
},
|
|
262
|
-
'/hello/api/bsb/books.json': {
|
|
263
|
-
translation: expectedTranslation,
|
|
264
|
-
books: [
|
|
265
|
-
{
|
|
266
|
-
id: 'GEN',
|
|
267
|
-
name: 'Genesis',
|
|
268
|
-
commonName: 'Genesis',
|
|
269
|
-
title: 'Genesis',
|
|
270
|
-
order: 1,
|
|
271
|
-
numberOfChapters: 1,
|
|
272
|
-
totalNumberOfVerses: 2,
|
|
273
|
-
firstChapterApiLink: '/hello/api/bsb/GEN/1.json',
|
|
274
|
-
lastChapterApiLink: '/hello/api/bsb/GEN/1.json',
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
id: 'EXO',
|
|
278
|
-
name: 'Exodus',
|
|
279
|
-
commonName: 'Exodus',
|
|
280
|
-
title: 'Exodus',
|
|
281
|
-
order: 2,
|
|
282
|
-
numberOfChapters: 1,
|
|
283
|
-
totalNumberOfVerses: 2,
|
|
284
|
-
firstChapterApiLink: '/hello/api/bsb/EXO/1.json',
|
|
285
|
-
lastChapterApiLink: '/hello/api/bsb/EXO/1.json',
|
|
286
|
-
},
|
|
287
|
-
],
|
|
288
|
-
},
|
|
289
|
-
'/hello/api/bsb/GEN/1.json': {
|
|
290
|
-
translation: expectedTranslation,
|
|
291
|
-
book: {
|
|
292
|
-
id: 'GEN',
|
|
293
|
-
name: 'Genesis',
|
|
294
|
-
commonName: 'Genesis',
|
|
295
|
-
title: 'Genesis',
|
|
296
|
-
order: 1,
|
|
297
|
-
numberOfChapters: 1,
|
|
298
|
-
totalNumberOfVerses: 2,
|
|
299
|
-
firstChapterApiLink: '/hello/api/bsb/GEN/1.json',
|
|
300
|
-
lastChapterApiLink: '/hello/api/bsb/GEN/1.json',
|
|
301
|
-
},
|
|
302
|
-
thisChapterLink: '/hello/api/bsb/GEN/1.json',
|
|
303
|
-
thisChapterAudioLinks: {},
|
|
304
|
-
nextChapterApiLink: '/hello/api/bsb/EXO/1.json',
|
|
305
|
-
nextChapterAudioLinks: {},
|
|
306
|
-
previousChapterApiLink: null,
|
|
307
|
-
previousChapterAudioLinks: null,
|
|
308
|
-
numberOfVerses: 2,
|
|
309
|
-
chapter: {
|
|
310
|
-
number: 1,
|
|
311
|
-
content: [
|
|
312
|
-
{
|
|
313
|
-
type: 'heading',
|
|
314
|
-
content: ['The Creation'],
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
type: 'line_break',
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
type: 'verse',
|
|
321
|
-
number: 1,
|
|
322
|
-
content: [
|
|
323
|
-
'In the beginning God created the heavens and the earth.',
|
|
324
|
-
],
|
|
325
|
-
},
|
|
326
|
-
{
|
|
327
|
-
type: 'line_break',
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
type: 'verse',
|
|
331
|
-
number: 2,
|
|
332
|
-
content: [
|
|
333
|
-
'Now the earth was formless and void, and darkness was over the surface of the deep. And the Spirit of God was hovering over the surface of the waters.',
|
|
334
|
-
],
|
|
335
|
-
},
|
|
336
|
-
],
|
|
337
|
-
footnotes: [],
|
|
338
|
-
},
|
|
339
|
-
},
|
|
340
|
-
'/hello/api/bsb/EXO/1.json': {
|
|
341
|
-
translation: expectedTranslation,
|
|
342
|
-
book: {
|
|
343
|
-
id: 'EXO',
|
|
344
|
-
name: 'Exodus',
|
|
345
|
-
commonName: 'Exodus',
|
|
346
|
-
title: 'Exodus',
|
|
347
|
-
order: 2,
|
|
348
|
-
numberOfChapters: 1,
|
|
349
|
-
totalNumberOfVerses: 2,
|
|
350
|
-
firstChapterApiLink: '/hello/api/bsb/EXO/1.json',
|
|
351
|
-
lastChapterApiLink: '/hello/api/bsb/EXO/1.json',
|
|
352
|
-
},
|
|
353
|
-
thisChapterLink: '/hello/api/bsb/EXO/1.json',
|
|
354
|
-
thisChapterAudioLinks: {},
|
|
355
|
-
nextChapterApiLink: null,
|
|
356
|
-
nextChapterAudioLinks: null,
|
|
357
|
-
previousChapterApiLink: '/hello/api/bsb/GEN/1.json',
|
|
358
|
-
previousChapterAudioLinks: {},
|
|
359
|
-
numberOfVerses: 2,
|
|
360
|
-
chapter: {
|
|
361
|
-
number: 1,
|
|
362
|
-
content: [
|
|
363
|
-
{
|
|
364
|
-
type: 'heading',
|
|
365
|
-
content: ['The Israelites Multiply in Egypt'],
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
type: 'line_break',
|
|
369
|
-
},
|
|
370
|
-
{
|
|
371
|
-
type: 'verse',
|
|
372
|
-
number: 1,
|
|
373
|
-
content: [
|
|
374
|
-
'These are the names of the sons of Israel who went to Egypt with Jacob, each with his family:',
|
|
375
|
-
],
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
type: 'line_break',
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
type: 'verse',
|
|
382
|
-
number: 2,
|
|
383
|
-
content: ['Reuben, Simeon, Levi, and Judah;'],
|
|
384
|
-
},
|
|
385
|
-
],
|
|
386
|
-
footnotes: [],
|
|
387
|
-
},
|
|
388
|
-
},
|
|
389
|
-
});
|
|
390
|
-
});
|
|
391
|
-
it('should use underscores for spaces in the book name', () => {
|
|
392
|
-
let translation1 = {
|
|
393
|
-
id: 'bsb',
|
|
394
|
-
name: 'Berean Standard Bible',
|
|
395
|
-
englishName: 'Berean Standard Bible',
|
|
396
|
-
shortName: 'BSB',
|
|
397
|
-
language: 'eng',
|
|
398
|
-
direction: 'ltr',
|
|
399
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
400
|
-
website: 'https://berean.bible',
|
|
401
|
-
};
|
|
402
|
-
let inputFiles = [
|
|
403
|
-
{
|
|
404
|
-
fileType: 'usfm',
|
|
405
|
-
metadata: {
|
|
406
|
-
translation: translation1,
|
|
407
|
-
},
|
|
408
|
-
content: firstXLines(_131CHBSB_usfm_1.default, 11),
|
|
409
|
-
},
|
|
410
|
-
];
|
|
411
|
-
const dataset = (0, dataset_1.generateDataset)(inputFiles, new linkedom_1.DOMParser());
|
|
412
|
-
const generated = (0, api_1.generateApiForDataset)(dataset, {
|
|
413
|
-
useCommonName: true,
|
|
414
|
-
});
|
|
415
|
-
const files = (0, api_1.generateFilesForApi)(generated);
|
|
416
|
-
const tree = fileTree(files);
|
|
417
|
-
const expectedTranslation = {
|
|
418
|
-
id: 'bsb',
|
|
419
|
-
name: 'Berean Standard Bible',
|
|
420
|
-
englishName: 'Berean Standard Bible',
|
|
421
|
-
shortName: 'BSB',
|
|
422
|
-
language: 'eng',
|
|
423
|
-
textDirection: 'ltr',
|
|
424
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
425
|
-
website: 'https://berean.bible',
|
|
426
|
-
availableFormats: ['json'],
|
|
427
|
-
listOfBooksApiLink: '/api/bsb/books.json',
|
|
428
|
-
numberOfBooks: 1,
|
|
429
|
-
totalNumberOfChapters: 1,
|
|
430
|
-
totalNumberOfVerses: 1,
|
|
431
|
-
languageName: 'English',
|
|
432
|
-
languageEnglishName: 'English',
|
|
433
|
-
};
|
|
434
|
-
expect(tree).toEqual({
|
|
435
|
-
'/api/available_translations.json': {
|
|
436
|
-
translations: [expectedTranslation],
|
|
437
|
-
},
|
|
438
|
-
'/api/bsb/books.json': {
|
|
439
|
-
translation: expectedTranslation,
|
|
440
|
-
books: [
|
|
441
|
-
{
|
|
442
|
-
id: '1CH',
|
|
443
|
-
name: '1 Chronicles',
|
|
444
|
-
commonName: '1 Chronicles',
|
|
445
|
-
title: '1 Chronicles',
|
|
446
|
-
numberOfChapters: 1,
|
|
447
|
-
totalNumberOfVerses: 1,
|
|
448
|
-
order: 13,
|
|
449
|
-
firstChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
450
|
-
lastChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
451
|
-
},
|
|
452
|
-
],
|
|
453
|
-
},
|
|
454
|
-
'/api/bsb/1_Chronicles/1.json': {
|
|
455
|
-
translation: expectedTranslation,
|
|
456
|
-
book: {
|
|
457
|
-
id: '1CH',
|
|
458
|
-
name: '1 Chronicles',
|
|
459
|
-
commonName: '1 Chronicles',
|
|
460
|
-
title: '1 Chronicles',
|
|
461
|
-
numberOfChapters: 1,
|
|
462
|
-
totalNumberOfVerses: 1,
|
|
463
|
-
order: 13,
|
|
464
|
-
firstChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
465
|
-
lastChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
466
|
-
},
|
|
467
|
-
thisChapterLink: '/api/bsb/1_Chronicles/1.json',
|
|
468
|
-
thisChapterAudioLinks: {},
|
|
469
|
-
nextChapterApiLink: null,
|
|
470
|
-
nextChapterAudioLinks: null,
|
|
471
|
-
previousChapterApiLink: null,
|
|
472
|
-
previousChapterAudioLinks: null,
|
|
473
|
-
numberOfVerses: 1,
|
|
474
|
-
chapter: {
|
|
475
|
-
number: 1,
|
|
476
|
-
content: [
|
|
477
|
-
{
|
|
478
|
-
type: 'heading',
|
|
479
|
-
content: ['From Adam to Abraham'],
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
type: 'line_break',
|
|
483
|
-
},
|
|
484
|
-
{
|
|
485
|
-
type: 'verse',
|
|
486
|
-
number: 1,
|
|
487
|
-
content: ['Adam, Seth, Enosh,'],
|
|
488
|
-
},
|
|
489
|
-
],
|
|
490
|
-
footnotes: [],
|
|
491
|
-
},
|
|
492
|
-
},
|
|
493
|
-
});
|
|
494
|
-
// expect(availableTranslations).toEqual({
|
|
495
|
-
// translations: [
|
|
496
|
-
// expectedTranslation
|
|
497
|
-
// ]
|
|
498
|
-
// });
|
|
499
|
-
});
|
|
500
|
-
it('produce the correct names for languages', () => {
|
|
501
|
-
let translation1 = {
|
|
502
|
-
id: 'bsb',
|
|
503
|
-
name: 'Berean Standard Bible',
|
|
504
|
-
englishName: 'Berean Standard Bible',
|
|
505
|
-
shortName: 'BSB',
|
|
506
|
-
language: 'spa',
|
|
507
|
-
direction: 'ltr',
|
|
508
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
509
|
-
website: 'https://berean.bible',
|
|
510
|
-
};
|
|
511
|
-
let inputFiles = [
|
|
512
|
-
{
|
|
513
|
-
fileType: 'usfm',
|
|
514
|
-
metadata: {
|
|
515
|
-
translation: translation1,
|
|
516
|
-
},
|
|
517
|
-
content: firstXLines(_131CHBSB_usfm_1.default, 11),
|
|
518
|
-
},
|
|
519
|
-
];
|
|
520
|
-
const dataset = (0, dataset_1.generateDataset)(inputFiles, new linkedom_1.DOMParser());
|
|
521
|
-
const generated = (0, api_1.generateApiForDataset)(dataset, {
|
|
522
|
-
useCommonName: true,
|
|
523
|
-
});
|
|
524
|
-
const files = (0, api_1.generateFilesForApi)(generated);
|
|
525
|
-
const tree = fileTree(files);
|
|
526
|
-
const expectedTranslation = {
|
|
527
|
-
id: 'bsb',
|
|
528
|
-
name: 'Berean Standard Bible',
|
|
529
|
-
englishName: 'Berean Standard Bible',
|
|
530
|
-
shortName: 'BSB',
|
|
531
|
-
language: 'spa',
|
|
532
|
-
textDirection: 'ltr',
|
|
533
|
-
licenseUrl: 'https://berean.bible/terms.htm',
|
|
534
|
-
website: 'https://berean.bible',
|
|
535
|
-
availableFormats: ['json'],
|
|
536
|
-
listOfBooksApiLink: '/api/bsb/books.json',
|
|
537
|
-
numberOfBooks: 1,
|
|
538
|
-
totalNumberOfChapters: 1,
|
|
539
|
-
totalNumberOfVerses: 1,
|
|
540
|
-
languageName: 'español',
|
|
541
|
-
languageEnglishName: 'Spanish',
|
|
542
|
-
};
|
|
543
|
-
expect(tree).toEqual({
|
|
544
|
-
'/api/available_translations.json': {
|
|
545
|
-
translations: [expectedTranslation],
|
|
546
|
-
},
|
|
547
|
-
'/api/bsb/books.json': {
|
|
548
|
-
translation: expectedTranslation,
|
|
549
|
-
books: [
|
|
550
|
-
{
|
|
551
|
-
id: '1CH',
|
|
552
|
-
name: '1 Chronicles',
|
|
553
|
-
commonName: '1 Chronicles',
|
|
554
|
-
title: '1 Chronicles',
|
|
555
|
-
numberOfChapters: 1,
|
|
556
|
-
totalNumberOfVerses: 1,
|
|
557
|
-
order: 13,
|
|
558
|
-
firstChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
559
|
-
lastChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
560
|
-
},
|
|
561
|
-
],
|
|
562
|
-
},
|
|
563
|
-
'/api/bsb/1_Chronicles/1.json': {
|
|
564
|
-
translation: expectedTranslation,
|
|
565
|
-
book: {
|
|
566
|
-
id: '1CH',
|
|
567
|
-
name: '1 Chronicles',
|
|
568
|
-
commonName: '1 Chronicles',
|
|
569
|
-
title: '1 Chronicles',
|
|
570
|
-
numberOfChapters: 1,
|
|
571
|
-
totalNumberOfVerses: 1,
|
|
572
|
-
order: 13,
|
|
573
|
-
firstChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
574
|
-
lastChapterApiLink: '/api/bsb/1_Chronicles/1.json',
|
|
575
|
-
},
|
|
576
|
-
thisChapterLink: '/api/bsb/1_Chronicles/1.json',
|
|
577
|
-
thisChapterAudioLinks: {},
|
|
578
|
-
nextChapterApiLink: null,
|
|
579
|
-
nextChapterAudioLinks: null,
|
|
580
|
-
previousChapterApiLink: null,
|
|
581
|
-
previousChapterAudioLinks: null,
|
|
582
|
-
numberOfVerses: 1,
|
|
583
|
-
chapter: {
|
|
584
|
-
number: 1,
|
|
585
|
-
content: [
|
|
586
|
-
{
|
|
587
|
-
type: 'heading',
|
|
588
|
-
content: ['From Adam to Abraham'],
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
type: 'line_break',
|
|
592
|
-
},
|
|
593
|
-
{
|
|
594
|
-
type: 'verse',
|
|
595
|
-
number: 1,
|
|
596
|
-
content: ['Adam, Seth, Enosh,'],
|
|
597
|
-
},
|
|
598
|
-
],
|
|
599
|
-
footnotes: [],
|
|
600
|
-
},
|
|
601
|
-
},
|
|
602
|
-
});
|
|
603
|
-
// expect(availableTranslations).toEqual({
|
|
604
|
-
// translations: [
|
|
605
|
-
// expectedTranslation
|
|
606
|
-
// ]
|
|
607
|
-
// });
|
|
608
|
-
});
|
|
609
|
-
});
|
|
610
|
-
function firstXLines(content, x) {
|
|
611
|
-
const lines = content.split('\n');
|
|
612
|
-
return lines.slice(0, x).join('\n');
|
|
613
|
-
}
|
|
614
|
-
function fileTree(outputFiles) {
|
|
615
|
-
let result = {};
|
|
616
|
-
for (let file of outputFiles) {
|
|
617
|
-
result[file.path] = file.content;
|
|
618
|
-
}
|
|
619
|
-
return result;
|
|
620
|
-
}
|
package/generation/audio.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KNOWN_AUDIO_TRANSLATIONS = void 0;
|
|
4
|
-
exports.getAudioUrlsForChapter = getAudioUrlsForChapter;
|
|
5
|
-
exports.capitalize = capitalize;
|
|
6
|
-
const lodash_1 = require("lodash");
|
|
7
|
-
const book_order_1 = require("./book-order");
|
|
8
|
-
const openBibleUrlGenerator = (translation, reader, postfix) => {
|
|
9
|
-
return (bookId, chapter) => {
|
|
10
|
-
const bookOrder = (0, lodash_1.padStart)(book_order_1.bookOrderMap.get(bookId).toString(), 2, '0');
|
|
11
|
-
const chapterStr = (0, lodash_1.padStart)(chapter.toString(), 3, '0');
|
|
12
|
-
let link = `https://openbible.com/audio/${reader}/${translation}_${bookOrder}_${capitalize(bookId)}_${chapterStr}`;
|
|
13
|
-
if (postfix) {
|
|
14
|
-
link += `_${postfix}`;
|
|
15
|
-
}
|
|
16
|
-
link += '.mp3';
|
|
17
|
-
return link;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* A map of translation IDs to a map of reader IDs to the URL generator for the audio file.
|
|
22
|
-
*/
|
|
23
|
-
exports.KNOWN_AUDIO_TRANSLATIONS = new Map([
|
|
24
|
-
['BSB', new Map([
|
|
25
|
-
['gilbert', openBibleUrlGenerator('BSB', 'gilbert', 'G')],
|
|
26
|
-
['hays', openBibleUrlGenerator('BSB', 'hays', "H")],
|
|
27
|
-
['souer', openBibleUrlGenerator('BSB', 'souer', null)],
|
|
28
|
-
])],
|
|
29
|
-
]);
|
|
30
|
-
/**
|
|
31
|
-
* Gets the audio URLs for the given translation, book, and chapter.
|
|
32
|
-
* @param translationId The ID of the translation.
|
|
33
|
-
* @param bookId The ID of the book.
|
|
34
|
-
* @param chapter The number of the chapter.
|
|
35
|
-
*/
|
|
36
|
-
function getAudioUrlsForChapter(translationId, bookId, chapter) {
|
|
37
|
-
const translation = exports.KNOWN_AUDIO_TRANSLATIONS.get(translationId);
|
|
38
|
-
if (!translation) {
|
|
39
|
-
return {};
|
|
40
|
-
}
|
|
41
|
-
const links = {};
|
|
42
|
-
for (let [reader, generator] of translation) {
|
|
43
|
-
const url = generator(bookId, chapter);
|
|
44
|
-
if (url) {
|
|
45
|
-
links[reader] = url;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return links;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Capitalizes the first letter of the given string.
|
|
52
|
-
* @param str The string to capitalize.
|
|
53
|
-
*/
|
|
54
|
-
function capitalize(str) {
|
|
55
|
-
const char = str.charAt(0);
|
|
56
|
-
if (/[0-9]/.test(char)) {
|
|
57
|
-
return str.charAt(0) + str.charAt(1).toUpperCase() + str.slice(2).toLowerCase();
|
|
58
|
-
}
|
|
59
|
-
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
60
|
-
}
|