-
Notifications
You must be signed in to change notification settings - Fork 2
/
build.js
67 lines (62 loc) · 2.04 KB
/
build.js
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
const iterator = require("./iterator");
const fs = require("fs");
const Number = require("./number");
const pandoc = require("./pandoc");
const { PassThrough } = require("stream");
var docs = [];
var builders = [];
iterator(function (srcname, name, variant, meta) {
docs.push(`* [${meta.pagetitle} - ${meta.subtitle}](${name}/${name}.html)`);
if (meta.repo && !process.argv.includes("repo:" + meta.repo)) return;
fs.cpSync(`${__dirname}/../styles`, `${__dirname}/../docs/${name}/styles`, {
recursive: true,
});
const srcImages = `${__dirname}/../${srcname}/images`;
if (fs.existsSync(srcImages)) {
const targetImages = `${__dirname}/../docs/${name}/images`;
if (fs.existsSync(targetImages))
fs.rmSync(targetImages, { recursive: true });
fs.cpSync(srcImages, targetImages, { recursive: true });
}
var md = fs.createWriteStream(`${__dirname}/../docs/${name}/${name}.md`);
var html = pandoc({
"--metadata-file": `${__dirname}/../${srcname}/${variant}.yaml`,
...meta.pandocOptions,
});
html.stdout.pipe(
fs.createWriteStream(`${__dirname}/../docs/${name}/${name}.html`),
);
builders.push({
number: new Number(`${__dirname}/../${srcname}`, variant, meta),
out: new PassThrough()
.on("data", function (chunk) {
md.write(chunk);
html.stdin.write(chunk);
})
.on("end", function () {
md.end();
html.stdin.end();
}),
then() {
console.log("✓", srcname, variant === "meta" ? "" : variant);
},
catch(err) {
console.log("❌", srcname, variant === "meta" ? "" : variant);
console.error(err.join("\n"));
console.error();
process.exitCode = 1;
},
});
});
Promise.all(builders.map((build) => build.number.read())).then(function () {
builders.forEach(function (build) {
build.number.write(build.out).then(build.then, build.catch);
});
});
fs.writeFileSync(
`${__dirname}/../docs/index.md`,
`# OData Specification Drafts
This repository contains working drafts for OData specifications:
${docs.sort().join("\n")}
`,
);