-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathh2roc
executable file
·56 lines (51 loc) · 2.13 KB
/
h2roc
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
#!/usr/bin/env node
const Converter = require("./lib/h2roc");
const Preview = require("ro-crate").Preview;
const HtmlFile = require("ro-crate").HtmlFile;
const fs = require("fs-extra");
const xml2js = require("xml2js");
const path = require("path");
const program = require("commander");
const { isNull } = require("util");
program
.version("0.1.0")
.description(
"Converts a Heurist XML file to an RO Crate and copies data from the --files directory specified"
)
.arguments("<i>")
.option("-c, --config [config]", "Configuration file", "en_config/expert-nation.config.json")
.option("-d, --domain [domain]", "A prefix for the dataset IDs", "test")
.option("-o, --out [out]", "Output directory in which to write the new ro-crate", "new_crate")
.option("-b, --baseCrate [RO-Crate template]", "Basic RO-Crate metadata file into which data should be added", "en_config/template-ro-crate-metadata.json")
.option("-f, --files [files]", "Data directory from which to copy files", null)
.action((i) => {inputFile = i || "en_config/EN_test_sefton.xml"})
program.parse(process.argv);
const destDir = program.out ;
const filesDir = program.files;
const templateFile = program.baseCrate;
const domain = program.domain;
const configPath = program.config;
async function main() {
await fs.mkdirp(destDir);
const data = await fs.readFile(inputFile);
const crateTemplate = JSON.parse(await fs.readFile(templateFile))
const hxml = await xml2js.parseStringPromise(data/*, options */)
.catch(function (err) {
// Failed
});
const converter = new Converter({
destDir: destDir,
filesDir: filesDir,
crateTemplate: crateTemplate,
hxml: hxml,
domain: domain,
configPath: JSON.parse(await fs.readFile(configPath))
});
await converter.convert();
fs.writeFileSync(path.join(destDir, "ro-crate-metadata.json"), JSON.stringify(converter.crate.json_ld, null, 2));
const preview = await new Preview(converter.crate);
const f = new HtmlFile(preview);
const html = path.join(destDir, "ro-crate-preview.html");
fs.writeFileSync(html, await f.render());
}
main();