64 lines
1.9 KiB
JavaScript
64 lines
1.9 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)
|
|
}
|
|
}
|