Jean-Yves Didier

setting tool to agregate library descriptions

{
"type": "module"
}
\ No newline at end of file
/**
* This tool is intended to build a description of a repository of components
*/
import process from 'node:process';
import * as fs from 'node:fs';
import path from 'node:path';
/**
* possible arguments:
* - "-o" with output file
* - "-d" with input directory
* - "-h" or "--help" displays usage
*/
let outputFile = "repos.json";
let inputDir = ".";
const usage = function(idx) {
console.log(path.basename(process.argv[1])," [-o output_file] [-d component_dir] [-h]");
console.log("\toutput_file is the generated repository json file (by default 'repos.json')");
console.log("\tcomponent_dir is the directory storing components (by default '.')");
return 0;
};
const helpers = {
'-h' : usage,
'--help': usage,
'-o' : function(idx) {
outputFile = process.argv[idx+1];
return 1;
},
'-d' : function(idx) {
inputDir = process.argv[idx+1];
return 1;
}
};
for (let i=2; i<process.argv.length; i++) {
if (helpers.hasOwnProperty(process.argv[i])) {
let shift = helpers[process.argv[i]](i);
i+=shift;
}
}
const getFiles = function(dir, filter, files_) {
files_ = files_ || [];
let files = fs.readdirSync(dir);
for (let i in files) {
let name = dir + '/' + files[i];
let stat = fs.statSync(name);
if (stat.isDirectory()) {
getFiles(name, files_);
} else {
if (path.extname(name) === filter)
files_.push(name);
}
}
return files_;
};
const files = getFiles(path.resolve(inputDir),'.js');
const list= {};
files.forEach(async (element) => {
try {
const components = await import(path.resolve(element));
if (components.__arcs__ !== undefined) {
console.log(`${element} contains a description`);
Object.assign(list, components.__arcs__);
} else {
console.log(`${element} does not contain a description`);
}
} catch (e) {
console.log(`${element} is not a valid component`);
}
});
console.log(list);