shex-test
Version:
Shape Expressions library tests.
74 lines (66 loc) • 2.31 kB
JavaScript
/* genCorpus - tool to generate a schema corpus
* install and run:
git clone git@github.com:shexSpec/shexTest.git
cd shexTest/
npm install
./bin/genCorpus.js -d schemas/ -o corpus.json
*/
var fs = require('fs');
var path = require("path");
// Parse arguments
var args = process.argv.slice(2);
if (args > 1 || args.indexOf("-help") !== -1 || args.indexOf("--help") !== -1) {
console.error('usage: genJSON manifest.ttl [-o outfile] [-w|-e] > manifest.jsonld');
return process.exit(1);
}
var FROMDIR = null;
if (args[0] === "-d") {
FROMDIR = args[1];
args.splice(0, 2); // git rid of -d fromdir
}
var OUTFILE = null;
if (args[0] === "-o") {
OUTFILE = args[1];
args.splice(0, 2); // git rid of -o outfile
}
// var errors = 0;
// var WARN = args[0] === "-w" ? "warn" : args[0] === "-e" ? "err" : null;
// function report (msg) {
// console.warn(msg);
// if (WARN === "err") {
// ++errors;
// }
// }
var corpus = fs.readdirSync(FROMDIR).filter(fn => {
// console.warn(path.extname(fn) === ".json", path.relative(".", path.resolve(FROMDIR, fn)), path.relative(".", OUTFILE));
// old strategy: look for all json files !== to the out corpus
// return path.extname(fn) === ".json" &&
// path.relative(".", path.resolve(FROMDIR, fn)) !== path.relative(".", OUTFILE);
// new strategy: look for a .shex files
return path.extname(fn) === ".shex"
}).map(fn => {
var stem = path.basename(fn, path.extname(fn));
// var rel = path.relative(".", path.join(path.dirname(fn), base));
// console.warn(fn);
try {
var js = JSON.parse(fs.readFileSync(path.resolve(FROMDIR, stem + ".json"), "utf8"));
if (false && "shapes" in js) // change shapes from hash(k->{o}) to array[{name:k, o}]
js.shapes = Object.keys(js.shapes).map(k => {
var ret = js.shapes[k];
ret.name = k;
return ret;
});
return {
filename: stem,
shex: fs.readFileSync(path.resolve(FROMDIR, stem + ".shex"), "utf8"),
json: js
};
} catch (e) {
var e2 = Error(`in file ${path.relative(".", path.resolve(FROMDIR, fn))}, ${e}`);
e2.stack = `in file ${path.relative(".", path.resolve(FROMDIR, fn))}, ${e.stack}`;
throw e2;
}
});
// console.warn(files);
fs.writeFileSync(OUTFILE, JSON.stringify(corpus, null, " "), {encoding: "utf8"});