67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
const {
|
|
readJSON, exists
|
|
} = require("fs-extra");
|
|
const {
|
|
resolve, join , dirname
|
|
} = require("path");
|
|
|
|
const getLibDir = (appPath, libname) => {
|
|
try {
|
|
const componentsFile = require.resolve(
|
|
join(libname, "components.json"),
|
|
{ paths: [appPath]});
|
|
return dirname(componentsFile);
|
|
} catch(e) {
|
|
console.log(e);
|
|
}
|
|
}
|
|
|
|
const getComponentsFilepath = libPath =>
|
|
resolve(libPath, "components.json");
|
|
|
|
module.exports.componentsFilepath = (appPath, libname) =>
|
|
getComponentsFilepath(getLibDir(appPath, libname));
|
|
|
|
module.exports.componentLibraryInfo = async (appPath, libname) => {
|
|
|
|
const libDir = getLibDir(appPath, libname);
|
|
const componentsPath = getComponentsFilepath(libDir);
|
|
|
|
if(!await exists(componentsPath)) {
|
|
const e = new Error(`could not find components definition file at ${componentsPath}`);
|
|
e.statusCode = 404;
|
|
throw e;
|
|
}
|
|
|
|
try {
|
|
const components = await readJSON(componentsPath);
|
|
const namespacedComponents = {_lib:components._lib};
|
|
for(let cname in components) {
|
|
if(cname === "_lib" || cname == "_generators") continue;
|
|
const namespacedName = `${libname}/${cname}`;
|
|
components[cname].name = namespacedName;
|
|
namespacedComponents[namespacedName] = components[cname];
|
|
}
|
|
|
|
const namespacedGenerators = {}
|
|
if(components._generators) {
|
|
namespacedGenerators._lib=components._generators._lib || "generators.js";
|
|
for(let gname in components._generators) {
|
|
if(gname === "_lib") continue;
|
|
const namespacedName = `${libname}/${gname}`;
|
|
components._generators[gname].name = namespacedName;
|
|
namespacedGenerators[namespacedName] = components._generators[gname];
|
|
}
|
|
}
|
|
|
|
return ({
|
|
components: namespacedComponents,
|
|
generators: namespacedGenerators,
|
|
libDir,
|
|
componentsPath
|
|
});
|
|
} catch(e) {
|
|
const err = `could not parse JSON - ${componentsPath} : ${e.message}`;
|
|
throw new Error(err);
|
|
}
|
|
} |