-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
build.mjs
99 lines (93 loc) · 3.35 KB
/
build.mjs
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
import { resolve as pathResolve } from 'path';
import templates from './src/templates.js';
//import { init, plugins } from '@twirl/book-builder';
import { init, plugins } from '../The-Book-Builder/index.js';
import { readFileSync, writeFileSync } from 'fs';
const l10n = {
en: JSON.parse(readFileSync('./src/en/l10n.json', 'utf-8')),
ru: JSON.parse(readFileSync('./src/ru/l10n.json', 'utf-8'))
};
const langsToBuild = (process.argv[2] &&
process.argv[2].split(',').map((s) => s.trim())) || ['ru', 'en'];
const targets = (
(process.argv[3] && process.argv[3].split(',')) || [
'html',
'pdf',
'epub',
'landing'
]
).reduce((targets, arg) => {
targets[arg.trim()] = true;
return targets;
}, {});
const chapters = process.argv[4];
console.log(`Building langs: ${langsToBuild.join(', ')}…`);
build(langsToBuild, targets, chapters).then(() => process.exit(0));
async function build(langsToBuild, targets, chapters) {
for (const lang of langsToBuild) {
const builder = await init({
l10n: l10n[lang],
basePath: pathResolve(`src`),
path: pathResolve(`src/${lang}/clean-copy`),
templates,
pipeline: {
css: {
beforeAll: [
plugins.css.backgroundImageDataUri,
plugins.css.fontFaceDataUri
]
},
ast: {
preProcess: [
plugins.ast.h3ToTitle,
plugins.ast.incuts({
funFact: 'Fun Fact. ',
beerMyth: 'Beer Myth. '
}),
plugins.ast.aImg,
plugins.ast.imgSrcResolve,
plugins.ast.ref,
plugins.ast.ghTableFix,
plugins.ast.stat
]
},
htmlSourceValidator: {
validator: 'WHATWG',
ignore: ['heading-level', 'no-raw-characters']
},
html: {
postProcess: [plugins.html.imgDataUri]
}
},
chapters
});
for (const target of Object.keys(targets)) {
if (target !== 'landing') {
await builder.build(
target,
pathResolve('docs', `${l10n[lang].file}.${lang}.${target}`)
);
} else {
const landingHtml = templates.landing(
builder.structure,
l10n[lang],
lang
);
writeFileSync(
pathResolve('docs', l10n[lang].landingFile),
landingHtml
);
}
console.log(
`Finished lang=${lang} target=${target}\n${Object.entries({
sources: 'Sources',
references: 'references',
words: 'words',
characters: 'characters'
})
.map(([k, v]) => `${v}: ${builder.structure[k]}`)
.join(', ')}`
);
}
}
}