@digicatapult/dtdl-parser
Version:
JS tool to parse DTDL defined Ontologies
60 lines (59 loc) • 2.26 kB
JavaScript
import r from 'fs';
import e from 'path';
import { errorHandler as t, isModelingException as l, isResolutionException as n } from './error.js';
let { log: s, error: i } = console;
export { getInterop } from './interop.js';
export const searchForJsonFiles = (t)=>r.existsSync(t) ? r.readdirSync(t).map((r)=>e.join(t, r)).reduce((t, l)=>r.statSync(l).isDirectory() ? t.concat(searchForJsonFiles(l)) : '.json' === e.extname(l) ? t.concat(l) : t, []) : (i(`'${t}' not a valid filepath`), []);
let a = (e)=>{
try {
let t = r.readFileSync(e, 'utf-8');
return JSON.parse(t);
} catch (r) {
return i(`Invalid JSON at '${e}'`), i(r), null;
}
}, o = (e, l, a)=>{
try {
let t = r.readFileSync(e, 'utf-8');
return l.parse(t), s(`Successfully validated '${e}'`), !0;
} catch (r) {
if (!a && n(r)) return s(`Successfully validated '${e}'`), !0;
return i(`Error parsing '${e}'`), t(r), !1;
}
};
export const parseDtdl = (r, e)=>{
try {
let t = JSON.parse(e.parse(r));
return s("Successfully parsed"), t;
} catch (r) {
return i("Error parsing"), t(r);
}
};
export const validateDirectories = (r, e, t)=>{
s(`${e.parserVersion()}\n`), s(`Validating DTDL at: '${r}'`);
let l = searchForJsonFiles(r);
if (l.length < 1) return !1;
for (let r of (s(`Found ${l.length} files:`), s(l), l))if (!o(r, e, t)) return !1;
return s(`All files validated!\n`), !0;
};
export const parseDirectories = (r, e)=>{
s(`${e.parserVersion()}\n`), s(`Parsing DTDL at: '${r}'`);
let t = searchForJsonFiles(r);
if (t.length < 1) return null;
s(`Found ${t.length} files:`), s(t);
let n = ((r)=>{
let e = [];
for (let t of r){
let r = a(t);
if (null === r) return null;
e.push(r);
}
return e;
})(t);
if (null === n) return null;
let i = parseDtdl(JSON.stringify(n), e);
if (l(i)) return s('Error while parsing directories:'), s(i), null;
s(`All files parsed!\n`), s("Entities:"), s(Object.keys(i));
let o = Object.values(i).filter((r)=>'Interface' === r.EntityKind);
return s(`Number of interfaces: ${o.length}`), i;
};
//# sourceMappingURL=index.js.map